在c#中如何向oracle传递大于32767的字符串?多谢指点!
解决方案 »
- dbf导入到oracle
- FreeBSd amd64下多次安装oracle client均告失败,amd64下,能安装oci?
- 复杂SQL求教
- 请问大家把oracle9i的表导入到oracle10g,这里哪里错了?
- 关于 connect by 怎么样用他对递归表分组统计
- 关于用sqlplus调用存储过程,救救小妹我吧
- 在ORACLE里有没有什么办法把所有表的建表语导出来,还有所的存储过程的语句导出来。
- 怎么看到返回结果集的存储过程的结果集的内容?
- ORACLE中有两列如何找出不同的
- Oracle商品和图片表的一对多设计要如何设计?
- 共享锁与排它锁有什么区别?
- 在写一句oracle 希望大家帮帮忙
也学是我的方法不对,麻烦你帮我看一下如何改进:
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就抱错,指点指点我吧,快两天啦,没有一点进展。
INSERT_STR VARCHAR2 (32767) := '';
这个就错了。varchar2最大长度4000byte
应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。