大佬们,请问使用游标处理动态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;