oracle BLOG变量中的内容在存储过程中读取后出现换行符异常,请问如何解决 30
V_LINEVARCHAR2(2048);--一行数据v_line1varchar2(2000);v_seevarchar2(200);n_testnumber;DBMS...
V_LINE VARCHAR2(2048); --一行数据
v_line1 varchar2(2000);
v_see varchar2(200);
n_test number;
DBMS_LOB.READ(V_CLOB,1024, 1, V_LINE); --从Blog变量中读取1024个字符,一个汉字算一个字符
v_line1 := substrb(v_line,1, 1024); --为了取1024个字节数,我用了substrb,这里已经出问题了,实际取出的值大于1024个字节,换行符没算。
v_see := '万一'||chr(10)||'12314121131'; --这是做测试的,带一个换行符的字符串变量
n_test := lengthb(v_see); --跟踪到此时n_test = 16,串长包括了换行符。
v_see := substrb(v_line ,1,100); --从v_line里取出100个字节的串看看
n_test := lengthb(v_see); --跟踪到此时n_test = 100,但实际上v_see的值如下面括号内:
(000000140000000011996.00
00000000012013060148480642 33193919 李一一 )
一共有101个字节,其中那个换行符没有被lengthb认到。另外把这样读出来的字符串作为变量去处理(比如用DBMS_OBFUSCATION_TOOLKIT.md5 进行MD5转换)时,是当作没有换行符来处理的。
用instr函数去找那个换行符的位置我还没有测试,暂不清楚结果如何。
现在我需要认到这些换行符,要能正确的截取指定长度的字符串,要能用正确的字符串进行运算,请问如何能解决?
写错了,是BLOB变量 展开
v_line1 varchar2(2000);
v_see varchar2(200);
n_test number;
DBMS_LOB.READ(V_CLOB,1024, 1, V_LINE); --从Blog变量中读取1024个字符,一个汉字算一个字符
v_line1 := substrb(v_line,1, 1024); --为了取1024个字节数,我用了substrb,这里已经出问题了,实际取出的值大于1024个字节,换行符没算。
v_see := '万一'||chr(10)||'12314121131'; --这是做测试的,带一个换行符的字符串变量
n_test := lengthb(v_see); --跟踪到此时n_test = 16,串长包括了换行符。
v_see := substrb(v_line ,1,100); --从v_line里取出100个字节的串看看
n_test := lengthb(v_see); --跟踪到此时n_test = 100,但实际上v_see的值如下面括号内:
(000000140000000011996.00
00000000012013060148480642 33193919 李一一 )
一共有101个字节,其中那个换行符没有被lengthb认到。另外把这样读出来的字符串作为变量去处理(比如用DBMS_OBFUSCATION_TOOLKIT.md5 进行MD5转换)时,是当作没有换行符来处理的。
用instr函数去找那个换行符的位置我还没有测试,暂不清楚结果如何。
现在我需要认到这些换行符,要能正确的截取指定长度的字符串,要能用正确的字符串进行运算,请问如何能解决?
写错了,是BLOB变量 展开
1个回答
展开全部
v_see := '万一'||chr(10)||'12314121131';
n_test := lengthb(substrb(strv_see,1,6)); --等于多少? 我这边输出是6
dbms_output.put_line(lengthb(v_see));
---------------------------------------------------
v_see := '万一'||chr(10)||'12314121131'; --这是做测试的,带一个换行符的字符串变量
n_test := lengthb(v_see); --跟踪到此时n_test = 16,串长包括了换行符。
v_see := substrb(v_line ,1,100); --从v_line里取出100个字节的串看看
n_test := lengthb(v_see);
dbms_output.put_line(v_see); --打印这个看看是什么内容?
n_test := lengthb(substrb(strv_see,1,6)); --等于多少? 我这边输出是6
dbms_output.put_line(lengthb(v_see));
---------------------------------------------------
v_see := '万一'||chr(10)||'12314121131'; --这是做测试的,带一个换行符的字符串变量
n_test := lengthb(v_see); --跟踪到此时n_test = 16,串长包括了换行符。
v_see := substrb(v_line ,1,100); --从v_line里取出100个字节的串看看
n_test := lengthb(v_see);
dbms_output.put_line(v_see); --打印这个看看是什么内容?
更多追问追答
追问
没有用put_line,直接在DEBUG中把v_see的值拷贝出来放到文本文件里看,是带换行符,有101个字节的。
追答
我不知道你的debug是什么,起码你在plsql中 执行看一下结果
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询