在PL/SQL中,我想將「源」模式作爲參數傳遞給存儲過程。例如:在PL/SQL中,我可以通過存儲過程參數傳遞遊標FROM子句的表模式嗎?
BEGIN
CURSOR my_cursor IS
SELECT my_field FROM <schema>.my_table
...
我想'模式'值來自存儲過程的輸入參數。有誰知道我該怎麼做?
P.S.對不起,如果這是一個愚蠢的簡單問題,但我是PL/SQL新手,必須快速編寫一些函數。
在PL/SQL中,我想將「源」模式作爲參數傳遞給存儲過程。例如:在PL/SQL中,我可以通過存儲過程參數傳遞遊標FROM子句的表模式嗎?
BEGIN
CURSOR my_cursor IS
SELECT my_field FROM <schema>.my_table
...
我想'模式'值來自存儲過程的輸入參數。有誰知道我該怎麼做?
P.S.對不起,如果這是一個愚蠢的簡單問題,但我是PL/SQL新手,必須快速編寫一些函數。
除了馬克什麼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;
這必須用動態SQL來完成。
DBMS_SQL包或Execute Immediate語句。
您不能在FROM子句中使用變量。
一個潛在的解決方案可能是
ALTER SESSION SET CURRENT_SCHEMA = '' < - 你想要的模式。
該命令更改默認模式。所以,如果你有一堆名字相同的表,你可以保存你自己的動態SQL並進行動態變更會話。
這就是引用遊標的用途..一些缺點(類型檢查?),但適用於你的想法。 – Thorsten 2008-11-10 19:39:55