2008-11-10 54 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並進行動態變更會話。

相關問題