2012-08-24 76 views
1

我需要將模式名稱作爲參數傳遞給存儲過程。但我最後錯誤ORA00942:table or view does not exist。我GOOGLE了很多,但沒有找到任何解決方案。如何在存儲過程中將模式名稱作爲參數傳遞

實際上,在我們的應用程序中,我們在一個模式中編寫存儲過程(SP),並將所有其他模式引用同一個SP。

考慮我必須在一個不同的模式中找到一個項目的股票(1個客戶端的模式)。然後

select * from abc.stock_table where itemid=xxx; 

在此查詢中,我想用不同的模式名稱替換abc

回答

0

您需要使用動態SQL,互聯網上有大量的材料。 例如on oracle website

CREATE OR REPLACE PROCEDURE query_invoice(
     month VARCHAR2, 
     year VARCHAR2) IS 
    TYPE cur_typ IS REF CURSOR; 
    c cur_typ; 
    query_str VARCHAR2(200); 
    inv_num NUMBER; 
    inv_cust VARCHAR2(20); 
    inv_amt NUMBER; 
BEGIN 
    query_str := 'SELECT num, cust, amt FROM inv_' || month ||'_'|| year 
     || ' WHERE invnum = :id'; 
    OPEN c FOR query_str USING inv_num; 
    LOOP 
     FETCH c INTO inv_num, inv_cust, inv_amt; 
     EXIT WHEN c%NOTFOUND; 
     -- process row here 
    END LOOP; 
    CLOSE c; 
END; 
/
0

從不同模式創建對象的公共同義詞。授予它特權。

相關問題