【发布时间】:2010-11-15 05:48:53
【问题描述】:
PROCEDURE A(
...
BEGIN
stmt := 'select * from '||src;
execute immediate stmt;
dbms_output.put_line(??);
END A;
【问题讨论】:
-
@OMG: 调用这个 PL/SQL 过程的结果已经被重定向到一个文件。
标签: sql stored-procedures plsql
PROCEDURE A(
...
BEGIN
stmt := 'select * from '||src;
execute immediate stmt;
dbms_output.put_line(??);
END A;
【问题讨论】:
标签: sql stored-procedures plsql
如果您在编写代码时知道“src”中命名的表的结构,那么您可以这样做:
PROCEDURE A IS
...
l_cur sys_refcursor;
BEGIN
stmt := 'select * from '||src;
open l_cur for stmt;
loop
fetch l_cur into ??; -- record or list of variables that matches columns of "src"
exit when l_cur%notfound;
dbms_output.put_line(??);
end loop;
close l_cur;
END A;
如果您直到运行时才知道结构,那么您将需要使用DBMS_SQL 包,它非常强大但并不简单。
【讨论】:
我不确定这是否适用于您的“立即执行 stmt”方法,但使用静态 Sql,以下对我有用:
for my_result in
(
select * from my_table tbl
where ...
order by tbl.my_id_col
) loop
dbms_output.put_line(my_result.field1 || ', ' || my_result.field2 || ...);
end loop;
【讨论】: