create or replace procedure test
(
v_table in varchar
)
is
begin
execute immediate 'select * from ' || v_table;
end;我想把表名当做参数传入,然后动态执行。但我怎么才能取回查找后的结果集。如果定义一个sys_refcursor的游标cursorName ,拼到'open cursorName for select * from '字符串里,
这样会报错。大家帮帮忙,怎么才能取回动态执行后的结果集?
create or replace procedure test(v_table in varchar,cu out sys_refcursor) is
begin
open cu for 'select * from ' || v_table;
end;declare
v_table varchar2(10):='EMP';
cu sys_refcursor ;
emptype emp%rowtype;
begin
test(v_table,cu);
loop
fetch cu into emptype;
exit when cu%notfound;
dbms_output.put_line(emptype.empno);
end loop;
end;
(
v_table in varchar;
type refcur is Ref Cursor;
cur refcur;
v_sql varchar2(100);
)
is
begin
v_sql := 'select * from ' || v_table;
open cur for v_sql;
end;
(
v_table in varchar
,p_cur out sys_refcursor;
)
is
begin
open p_cur for 'select * from ' || v_table;
end;
create or replace procedure test
(
v_table in varchar;
)
is
type refcur is Ref Cursor;
cur refcur;
v_sql varchar2(100);
begin
v_sql := 'select * from ' || v_table;
open cur for v_sql;
end;
--将一个查询的结果 记录by记录 地列出来
create or replace procedure print_table( p_query in varchar2 )
AUTHID CURRENT_USER
is
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_descTbl dbms_sql.desc_tab;
l_colCnt number;
begin
execute immediate
'alter session set
nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
dbms_sql.describe_columns
( l_theCursor, l_colCnt, l_descTbl );for i in 1 .. l_colCnt loop
dbms_sql.define_column
(l_theCursor, i, l_columnValue, 4000);
end loop;l_status := dbms_sql.execute(l_theCursor);while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
for i in 1 .. l_colCnt loop
dbms_sql.column_value
( l_theCursor, i, l_columnValue );
dbms_output.put_line
( rpad( l_descTbl(i).col_name, 30 )
|| ': ' ||
l_columnValue );
end loop;
dbms_output.put_line( '-----------------' );
end loop;
execute immediate
'alter session set nls_date_format=''dd-MON-rr'' ';
exception
when others then
execute immediate
'alter session set nls_date_format=''dd-MON-rr'' ';
raise;
end;
/
可以 ROW1.栏位名 做动作啊END LOOP;
(
v_table in varchar,mycur out sys_refcursor
) is begin
open mycur for
'select * from ' || v_table;
end;