20 个解决方案
#1
怎么没人说话啊?
#2
没意思,放假啦,也没人来论坛。
#3
varchar2的长度限制是4000。可以考虑用可变数组。
#4
不明白,能详细说明吗?多谢指点!
#5
好静啊!
#6
自己顶!
#7
路过
#8
用 CLOB 类型的字段来存储大于 4000 字节的字符串数据。
#9
多谢 飞不起来的笨鸟指点,我试过CLOB,但只能接收小于32767的字符串。
#10
有路过多谢帮我顶啊!
#11
clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
#12
那就用两个变量接,然后拼接起来。o(∩_∩)o...
#13
我知道mssql里有nvarchar(max)类型
#14
学习甲骨文,你好,多谢!你说:clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
也学是我的方法不对,麻烦你帮我看一下如何改进:
1、在oracle中有一个procedure:
PROCEDURE GET_MSG (
RECEIVED_MSG IN CLOB
)
IS
INSERT_STR VARCHAR2 (32767) := '';
LOB_LEN NUMBER;
CUR_LOB_LEN NUMBER;
V_POS NUMBER := 1;
J INTEGER;
J_LOOP INTEGER;
BEGIN
LOB_LEN := DBMS_LOB.GETLENGTH (RECEIVED_MSG);
J := CEIL (LOB_LEN / 32767);
FOR J_LOOP IN 1 .. J
LOOP
CUR_LOB_LEN := LOB_LEN - (J - 1) * 32767;
V_POS := V_POS + (J_LOOP - 1) * 32767;
DBMS_LOB.READ (RECEIVED_MSG, CUR_LOB_LEN, V_POS, INSERT_STR);
。。。 。。。
END LOOP;
end;
2、在c#中定义一个string类型的变量,直接将该变量的值传递给RECEIVED_MSG ,当c#中的string变量超过32513时,就会报错:
ORA-01460: 转换请求无法实现或不合理\n
我好晕啊,不知道32513到底代表什么,只要超过32513就抱错,指点指点我吧,快两天啦,没有一点进展。
也学是我的方法不对,麻烦你帮我看一下如何改进:
1、在oracle中有一个procedure:
PROCEDURE GET_MSG (
RECEIVED_MSG IN CLOB
)
IS
INSERT_STR VARCHAR2 (32767) := '';
LOB_LEN NUMBER;
CUR_LOB_LEN NUMBER;
V_POS NUMBER := 1;
J INTEGER;
J_LOOP INTEGER;
BEGIN
LOB_LEN := DBMS_LOB.GETLENGTH (RECEIVED_MSG);
J := CEIL (LOB_LEN / 32767);
FOR J_LOOP IN 1 .. J
LOOP
CUR_LOB_LEN := LOB_LEN - (J - 1) * 32767;
V_POS := V_POS + (J_LOOP - 1) * 32767;
DBMS_LOB.READ (RECEIVED_MSG, CUR_LOB_LEN, V_POS, INSERT_STR);
。。。 。。。
END LOOP;
end;
2、在c#中定义一个string类型的变量,直接将该变量的值传递给RECEIVED_MSG ,当c#中的string变量超过32513时,就会报错:
ORA-01460: 转换请求无法实现或不合理\n
我好晕啊,不知道32513到底代表什么,只要超过32513就抱错,指点指点我吧,快两天啦,没有一点进展。
#15
路过帮我顶啊!
#16
别的不说,你这个过程里:
INSERT_STR VARCHAR2 (32767) := '';
这个就错了。varchar2最大长度4000byte
INSERT_STR VARCHAR2 (32767) := '';
这个就错了。varchar2最大长度4000byte
#17
INSERT_STR VARCHAR2 (32767) := '';
应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
#18
恩。varchar2字段和变量最大长度不同。还没注意过这个问题。
你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
#19
说错了,是INSERT_STR变量。
#20
应该不行,你就别等啦,没答案的。
因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。
因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。
#21
#1
怎么没人说话啊?
#2
没意思,放假啦,也没人来论坛。
#3
varchar2的长度限制是4000。可以考虑用可变数组。
#4
不明白,能详细说明吗?多谢指点!
#5
好静啊!
#6
自己顶!
#7
路过
#8
用 CLOB 类型的字段来存储大于 4000 字节的字符串数据。
#9
多谢 飞不起来的笨鸟指点,我试过CLOB,但只能接收小于32767的字符串。
#10
有路过多谢帮我顶啊!
#11
clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
#12
那就用两个变量接,然后拼接起来。o(∩_∩)o...
#13
我知道mssql里有nvarchar(max)类型
#14
学习甲骨文,你好,多谢!你说:clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
也学是我的方法不对,麻烦你帮我看一下如何改进:
1、在oracle中有一个procedure:
PROCEDURE GET_MSG (
RECEIVED_MSG IN CLOB
)
IS
INSERT_STR VARCHAR2 (32767) := '';
LOB_LEN NUMBER;
CUR_LOB_LEN NUMBER;
V_POS NUMBER := 1;
J INTEGER;
J_LOOP INTEGER;
BEGIN
LOB_LEN := DBMS_LOB.GETLENGTH (RECEIVED_MSG);
J := CEIL (LOB_LEN / 32767);
FOR J_LOOP IN 1 .. J
LOOP
CUR_LOB_LEN := LOB_LEN - (J - 1) * 32767;
V_POS := V_POS + (J_LOOP - 1) * 32767;
DBMS_LOB.READ (RECEIVED_MSG, CUR_LOB_LEN, V_POS, INSERT_STR);
。。。 。。。
END LOOP;
end;
2、在c#中定义一个string类型的变量,直接将该变量的值传递给RECEIVED_MSG ,当c#中的string变量超过32513时,就会报错:
ORA-01460: 转换请求无法实现或不合理\n
我好晕啊,不知道32513到底代表什么,只要超过32513就抱错,指点指点我吧,快两天啦,没有一点进展。
也学是我的方法不对,麻烦你帮我看一下如何改进:
1、在oracle中有一个procedure:
PROCEDURE GET_MSG (
RECEIVED_MSG IN CLOB
)
IS
INSERT_STR VARCHAR2 (32767) := '';
LOB_LEN NUMBER;
CUR_LOB_LEN NUMBER;
V_POS NUMBER := 1;
J INTEGER;
J_LOOP INTEGER;
BEGIN
LOB_LEN := DBMS_LOB.GETLENGTH (RECEIVED_MSG);
J := CEIL (LOB_LEN / 32767);
FOR J_LOOP IN 1 .. J
LOOP
CUR_LOB_LEN := LOB_LEN - (J - 1) * 32767;
V_POS := V_POS + (J_LOOP - 1) * 32767;
DBMS_LOB.READ (RECEIVED_MSG, CUR_LOB_LEN, V_POS, INSERT_STR);
。。。 。。。
END LOOP;
end;
2、在c#中定义一个string类型的变量,直接将该变量的值传递给RECEIVED_MSG ,当c#中的string变量超过32513时,就会报错:
ORA-01460: 转换请求无法实现或不合理\n
我好晕啊,不知道32513到底代表什么,只要超过32513就抱错,指点指点我吧,快两天啦,没有一点进展。
#15
路过帮我顶啊!
#16
别的不说,你这个过程里:
INSERT_STR VARCHAR2 (32767) := '';
这个就错了。varchar2最大长度4000byte
INSERT_STR VARCHAR2 (32767) := '';
这个就错了。varchar2最大长度4000byte
#17
INSERT_STR VARCHAR2 (32767) := '';
应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
#18
恩。varchar2字段和变量最大长度不同。还没注意过这个问题。
你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
#19
说错了,是INSERT_STR变量。
#20
应该不行,你就别等啦,没答案的。
因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。
因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。