assission123456 2019-07-18 10:40 采纳率: 100%
浏览 463
已采纳

请问使用游标处理动态sql的时候出现长度超长的问题如何解决?

大佬们,请问使用游标处理动态sql的时候出现长度超长的问题该如何解决?
我是想在系统表中获取到我想要的表名,之后再对表名进行一些处理,但是我在做第一步,也就是获取我想要的表名的时候,就出现了问题。

由于我使用了动态游标循环来执行我所用的sql已获取表名,但是当循环第十次的时候,就爆出字符超长(超过了游标的嘴馋长度4K字节),请问该如何解决这个问题?详细代码如下:

set serveroutput on 
declare    
 type cur_type is ref cursor;   
 cur cur_type;   
 rec USER_TAB_COLUMNS%rowtype;   
 str varchar2(1000);   
 letter char:= '1';   
begin  
        loop           
        str:= 'WITH TAB1 AS(
                SELECT DISTINCT TABLE_NAME FROM user_tab_columns WHERE TABLE_NAME IN (
                select TABLE_NAME from user_tab_columns 
                where (table_name like ''ODS_DMS%'' OR table_name like ''ODS_CDM%'') 
                AND COLUMN_NAME=''EFFECTIVE_START_DATE''
                AND table_name NOT like ''%LISTING%'') AND COLUMN_NAME=''PK_ID''),
               TAB2 AS(
                SELECT TABLE_NAME,ROW_NUMBER()OVER(ORDER BY TABLE_NAME)PK_ID 
                FROM TAB1)
               SELECT TABLE_NAME FROM TAB2 WHERE PK_ID='||letter||' ';   
         open cur for str;   
         dbms_output.put_line('PK_ID'||letter||':');   
          loop   
         fetch cur into rec.table_name;   
         exit when cur%notfound;   
         dbms_output.put_line(rec.table_name); 
          end loop; 
        exit when letter='9';  
        close cur;   
        letter:=letter+1;   
        end loop;   
end; 
  • 写回答

3条回答 默认 最新

  • assission123456 2019-07-18 16:27
    关注

    WOC ,回头看了一下代码,发现自己傻逼了。
    letter char:= '1'; 改成letter varchar2(100):= '1'; 就好了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 西门吹雪__ 2019-07-18 10:54
    关注

    增加undo空间和undo_retention

    评论
  • ZJHZ_叶 2019-07-19 11:18
    关注

    set serveroutput on size 100000

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口