create or replace package pkg_public_int is type type_ref_cur is ref cursor; procedure mytest
(
num in integer,
o_cursor out type_ref_cur
);end;
create or replace package body pkg_public_int is procedure mytest
(
num in integer,
o_cursor out type_ref_cur
)is
v_sql varchar2(32760);
v_sql1 varchar2(32760);
my_num integer := 0;
begin
loop
v_sql := v_sql ||','|| my_num ||' as t_'|| my_num;
v_sql := v_sql ||','|| my_num ||' as t_'|| my_num;
my_num := my_num +1;
exit when my_num > num;
end loop;
open o_cursor for
'select 1 f1 '||v_sql || v_sql1|| ' from dual';
end;end;
-----------------------如上所示的package定义中,mytest过程给定参数超过一定值的话就会报错;
原因好像是plsql的varchar2定义不能超过32767,
有什么办法可以实现同样的功能,同时又支持大的sql statement?
(
num in integer,
o_cursor out type_ref_cur
);end;
create or replace package body pkg_public_int is procedure mytest
(
num in integer,
o_cursor out type_ref_cur
)is
v_sql varchar2(32760);
v_sql1 varchar2(32760);
my_num integer := 0;
begin
loop
v_sql := v_sql ||','|| my_num ||' as t_'|| my_num;
v_sql := v_sql ||','|| my_num ||' as t_'|| my_num;
my_num := my_num +1;
exit when my_num > num;
end loop;
open o_cursor for
'select 1 f1 '||v_sql || v_sql1|| ' from dual';
end;end;
-----------------------如上所示的package定义中,mytest过程给定参数超过一定值的话就会报错;
原因好像是plsql的varchar2定义不能超过32767,
有什么办法可以实现同样的功能,同时又支持大的sql statement?
在存储过程中向临时表中写数据,然后从临时表返回数据。
TYPE varchar2a IS TABLE OF VARCHAR2(32767) INDEX BY binary_integer;
具体使用方法,可以google一下dbms_sql。
这样的话就多了一个限制,比如,临时表只能255个字段,^_^
所以,这个有点难。