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

请问使用游标处理动态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'; 就好了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀