2010-11-15 57 views
1
PROCEDURE A(
... 
BEGIN 
stmt := 'select * from '||src; 
execute immediate stmt; 
dbms_output.put_line(??); 
END A; 
+0

@OMG:调用此PL/SQL过程的结果已被重定向到一个文件。 – Moeb 2010-11-15 06:10:33

回答

0

如果你知道表的命名结构在“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包,这是非常强大的,但并不简单。

0

我不知道这个阉正与你的“执行即时语句”的做法,但静态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;