oracle表中的奇怪字符(阻止转换为XML)

时间:2014-05-01 13:38:50

标签: sql oracle plsql

我在表格中有一个字符串,其中有一些奇怪的东西。当我在toad中打开它时,你会看到一个灰色标记:

当我尝试将其转换为这样的XML时,会触发错误:

select xmlelement ("x",value)
from bad_strings;

ORA-31061: XDB-fout: special char to escaped char conversion failed.

如果我将其导出到文本文件(使用utl_file),则会删除奇怪的字符。如果我在sqldevelopet中打开它,它也不可见。

现在我很好奇它是什么(以及它是如何实现的,但那是另一个故事)。我虽然可以使用ascii()来查看它的ascii值是什么,但这似乎不起作用。

如果我要求字符串的长度,我得到48,这是可见字符的长度。 使用像这样的脚本查看ascii代码并不能解决任何异常问题:

set serveroutput on;
DECLARE
   l_string   VARCHAR2 (600);
   l_stringlen number;
BEGIN
   SELECT   VALUE
     INTO   l_string
     FROM   bad_strings
    WHERE   pk = 195789220;

    l_stringlen := length(l_string);

    for x in 1..l_stringlen
    loop
        dbms_output.put_line(x || ':    ' || substr(l_string,x,1) || ' --> ' || ascii(substr(l_string,x,1))) ;
    end loop;
 END;



1:    v --> 118
2:    e --> 101
3:    r --> 114
4:    h --> 104
5:    u --> 117
6:    i --> 105
7:    s --> 115
8:    t --> 116
9:      --> 32
10:    b --> 98
11:    i --> 105
12:    n --> 110
13:    n --> 110
14:    e --> 101
15:    n --> 110
16:    k --> 107
17:    o --> 111
18:    r --> 114
19:    t --> 116
20:      --> 32
21:    n --> 110
22:    a --> 97
23:    a --> 97
24:    r --> 114
25:      --> 32
26:    b --> 98
27:    u --> 117
28:    i --> 105
29:    t --> 116
30:    e --> 101
31:    n --> 110
32:    l --> 108
33:    a --> 97
34:    n --> 110
35:    d --> 100
36:      --> 32
37:     --> 29
38:    2 --> 50
39:    1 --> 49
40:    - --> 45
41:    1 --> 49
42:    0 --> 48
43:    - --> 45
44:    2 --> 50
45:    0 --> 48
46:    1 --> 49
47:    3 --> 51
48:    ) --> 41

也没有倾销它:

select value, dump(value,1017) from bad_strings
where pk = 195789220;

Typ=1 Len=48 CharacterSet=WE8MSWIN1252: v,e,r,h,u,i,s,t, ,b,i,n,n,e,n,k,o,r,t, ,n,a,a,r, ,b,u,i,t,e,n,l,a,n,d, ,^],2,1,-,1,0,-,2,0,1,3,)

所以我有点不解。什么是这个奇怪的角色阻止我将其转换为XML? 任何想法?

我使用的是Oracle 11g企业版11.2.0.4.0版 - 64位

1 个答案:

答案 0 :(得分:0)

如何复制文本并将其粘贴到Notepad ++中?您可以将其设置为“显示所有字符”,这样您就可以看到所有内容。我有一个类似的问题,一个值,它是一些HTML字符。我真的不记得是哪一个。

相关问题