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

请问使用游标处理动态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 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用