2013-01-17 35 views
0

比方說sStorecode是:00020EXECUTE IMMEDIATE PL/SQL

以下只是執行select語句在表STOREINFO另一個數據庫存儲,以獲得ACCOUNTID,例如連接到p008081(其中008的子sStorecode和081是我加入下面), ,但由於某種原因(無效的SQL語句)我得到錯誤,有人可以幫忙嗎?

EXECUTE IMMEDIATE 'select AccountID from [email protected]'||substr(sSTORECODE,3,3)||'081'; 

在此先感謝!

+0

那麼'STOREINFO'是表的名字,還是名爲'p008081'的表? –

回答

0

好像應該是這樣的,而不是:

'select AccountID from STORE.STOREINFO WHERE sStorecode = ''p'||substr(sSTORECODE,3,3)||'081'''; 
+0

在PL/SQL中,反斜槓不能用作轉義字符。如果你想*轉義*報價,你需要加倍。但是如果我沒有弄錯,user1941350必須處理相當動態的表名,例如* p008081 *。無論如何,這無濟於事。 – Codo

+0

@Codo - 謝謝,更新了我的答案。自從他在表STOREINFO *中特別說*以來,我不確定動態表格。所以這個問題在我看來似乎還不清楚。 –

2

EXECUTE IMMEDIATE是PL/SQL命令。在PL/SQL中,SELECT語句的結果需要去某處。但是,你的陳述,你沒有指定它應該去的地方。

因此,如果你希望一個單列,你可以寫:

EXECUTE IMMEDIATE 'select AccountID from [email protected]'||substr(sSTORECODE,3,3)||'081' 
    INTO l_account_id; 

l_account_id是本地的PL/SQL變量。

如果您希望在幾個行,你可以使用

EXECUTE IMMEDATE ... BULK COLLECT INTO l_account_tab; 

l_account_tab是一個PL/SQL集合變量。

或者,如果你想使用遊標工作,你可以這樣寫:

OPEN account_id_cv FOR 'select AccountID from [email protected]'||substr(sSTORECODE,3,3)||'081'; 

account_id_cv是一個REF CURSOR變量。

相關問題