这个和你的字符编码设置有关,你调整一下就好了。PL/SQL DEV软件的 *** 作方法如下:tool菜单--〉preferences菜单--〉files(HTML/XML)-->XML-->Charset Encoding,选择字体编码格式,一般我们都是用的“GB2312(Chinese Simplified),看看你的这个编码是不是有问题。
在oracle中提供了许多内置的程序包,它们用于扩展数据库的功能。在开发应用程序时,可以利用这些程序包。数据库用户sys拥有oracle提供的所有程序包。他们被定义为共有同义词,并将执行权限授予了public用户组,任何用户都可以访问它们。其中DBMS_XMLQUERY包用于将查询结果转换为XML格式,DBMS_LOB程序包包含雨处理大型对象的过程和函数。下面我们看一下DBMS_XMLQUERY和DBMS_LOB的用法:
SQL> DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERYgetXml('select empno,empname from employee');
xmlstr :=DBMS_LOBSUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUTPUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;
在上面的例子中我们声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,32767值指定要从CLOB数据类型读取的最大字节数。检索到的字符串存储xmlstr变量中。LOOP块循环执行,每次从xmlstr中读取一行。INSTR函数返回一个字符串在另一个字符串首次出现的位置。在此,该函数返回换行符在字符串中的位置,直到遇到下一行。
大家觉得例子的结果能不能读出我们预期的结果呢?试试就知道了!!!
结果如下:
<xml version='10'>
<ROWSET>
<ROW num="1">
<EMPNO>E001</EMPNO>
<EMPNAME>Jane</EMPNAME>
</ROW>
<ROW num="2">
<EMPNO>E002</EMPNO>
<EMPNAME>John</EMPNAME>
</ROW>
<ROW num="3">
<EMPNO>E003</EMPNO>
<EMPNAME>Joe</EMPNAME>
</ROW>
</ROWSET>
如果
xml
属性值里包含双引号,则有两种方法:1属性值改用单引号界定
比如:caption='测试"测试'2属性值总的双引号用实体引用替换
比如:caption="测试"测试"
但由于是程序动态生成的,建议:当属性值用单引号界定时,那含有属性值的变量比如A_name最好
把
单引号替换成
单引号的实体引用。当属性值用双引号界定时,那含有属性值的变量比如A_name最好
把
双引号替换成
双引号的实体引用。这样安全些。
不知道是不是你想要的答案。因为你的例子提示的那个
2个“"”号
没什么问题,只是属性值的界定。
以上就是关于为什么PL/Sql 导出XML文件,汉字为乱码全部的内容,包括:为什么PL/Sql 导出XML文件,汉字为乱码、如何将Oracle查询结果转成XML文件、access数据库如何生成xml文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)