2008-11-10 52 views

回答

8

除了马克什么Brady表示,另一个动态SQL选择是使用一个REF CURSOR。由于您的示例代码包含一个游标,因此这将是最相关的。

PROCEDURE select_from_schema(the_schema VARCHAR2) 
IS 
    TYPE my_cursor_type IS REF CURSOR; 
    my_cursor my_cursor_type; 
BEGIN 
    OPEN my_cursor FOR 'SELECT my_field FROM '||the_schema||'.my_table'; 

    -- Do your FETCHes just as with a normal cursor 

    CLOSE my_cursor; 
END; 
+0

这就是引用游标的用途..一些缺点(类型检查?),但适用于你的想法。 – Thorsten 2008-11-10 19:39:55

3

这必须用动态SQL来完成。

DBMS_SQL包或Execute Immediate语句。

您不能在FROM子句中使用变量。

一个潜在的解决方案可能是

ALTER SESSION SET CURRENT_SCHEMA = '' < - 你想要的模式。

该命令更改默认模式。所以,如果你有一堆名字相同的表,你可以保存你自己的动态SQL并进行动态变更会话。

相关问题