为什么LONG类型超4000字节出错??

xxiao07 2008-11-04 10:03:17
请看一下两例:

1、
PROCEDURE proc_SQLTOLONG
IS

CURSOR cur_A IS
SELECT * FROM P_AISQLINFO;
BEGIN
DBMS_OUTPUT.PUT_LINE('begin.....');
DBMS_OUTPUT.PUT_LINE(SYSDATE);


FOR row_set IN cur_A LOOP
BEGIN

update P_AISQLINFO_new
set EDITLIST= --是LONG类型
'[TITLE]'||chr(10) || row_set.TITLELIST || '[SQL]'||chr(10) || row_set.SQLLIST
|| '[VARIABLE]'||chr(10) || row_set.VARIABLELIST || row_set.EDITLIST
-- 这些信息串联起来不过10000字节 出错-01489 ---

WHERE NAME=row_set.NAME;
-------------------------------------------------------------------------
2、 update P_AISQLINFO_new
set EDITLIST= --是LONG类型
‘XXXXXXXX..........................FFFFFFFFFFFFFFFFFF'

当超过4000字节时,也出错!!!
================================================
请高手解答!谢谢!


...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracledbalgtu 2008-11-06
  • 打赏
  • 举报
回复
需要先定义一个long类型的变量,然后把字符串附给long变量,然后再update:
....
v_long long;
....
begin
v_long:='[TITLE]'||chr(10) || row_set.TITLELIST || '[SQL]'||chr(10);
v_long:=v_long||row_set.SQLLIST || '[VARIABLE]'||chr(10) ;
v_long:=v_long||row_set.VARIABLELIST || row_set.EDITLIST;
--保证上面每次累加的字符串不超过4000,多于4000分多次累加
.....
update .... set editlist=v_long ....

....



[Quote=引用楼主 xxiao07 的帖子:]
请看一下两例:

1、
PROCEDURE proc_SQLTOLONG
IS

CURSOR cur_A IS
SELECT * FROM P_AISQLINFO;
BEGIN
DBMS_OUTPUT.PUT_LINE('begin.....');
DBMS_OUTPUT.PUT_LINE(SYSDATE);


FOR row_set IN cur_A LOOP
BEGIN

update P_AISQLINFO_new
set EDITLIST= --是LONG类型
'[TITLE]'||chr(10) || row_set.TITLE…
[/Quote]
牧牛人软件 2008-11-06
  • 打赏
  • 举报
回复
STR VARCHAR2(32700);


STR :='[TITLE]'||chr(10) || row_set.TITLELIST || '[SQL]'||chr(10) || row_set.SQLLIST
|| '[VARIABLE]'||chr(10) || row_set.VARIABLELIST || row_set.EDITLIST;

用STR过渡一下就可以

update P_AISQLINFO_new
set EDITLIST= STR --是LONG类型
sleepzzzzz 2008-11-04
  • 打赏
  • 举报
回复
你使用的应该是10g以上版本
icss_zhen 2008-11-04
  • 打赏
  • 举报
回复
猜想long类型最大长度应该只能为4000,可以去google啊,应该很多解答
范佩西_11 2008-11-04
  • 打赏
  • 举报
回复
这一篇专门long的文章可以仔细看下:
oracle 10g 后推荐clob类型代替long类型 ,是为了兼容性才保留long的
帖子地址:
http://blog.sina.com.cn/s/blog_54eeb5d901009n1t.html
xxiao07 2008-11-04
  • 打赏
  • 举报
回复
9i long类型只能是4000字节?
范佩西_11 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 xxiao07 的帖子:]
请看一下两例:

1、
PROCEDURE proc_SQLTOLONG
IS

CURSOR cur_A IS
SELECT * FROM P_AISQLINFO;
BEGIN
DBMS_OUTPUT.PUT_LINE('begin.....');
DBMS_OUTPUT.PUT_LINE(SYSDATE);


FOR row_set IN cur_A LOOP
BEGIN

update P_AISQLINFO_new
set EDITLIST= --是LONG类型
'[TITLE]'||chr(10) || row_set.TITLE…
[/Quote]oracle 10g 后推荐clob类型代替long类型
long类型自动转换为varchar2类型,varchar2类型最大字节数为4000

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧