2014-04-29 84 views
1

我想爲我的Oracle SQL Query創建一個基於綁定參數的結果。例如Oracle綁定變量 - 請求查詢

Select * from emp where ename =:xyz;

它應該問我在運行時的xyz值。

我該怎麼辦?

它讓我givig錯誤 - 綁定變量沒有聲明...

請幫助...

感謝。

+1

您是作爲語句還是作爲腳本運行?一個提示你輸入綁定值,但是我沒有SQL Developer在我面前,並且不記得哪個! –

回答

1

我想你應該使用轉義字符,在我的情況下是&。

這將是

SELECT * from emp where ename = &xyz; 

感謝 問候

+0

確保你已經執行了:set escape off –

+1

你正在從綁定變量改變爲替換變量,這在SQL重用中不會有同樣的好處(減少硬解析等);這不是一個真正的問題,而不是問題的要求?爲什麼'逃脫' - 這裏沒有逃脫? –

4

如果您運行的語句作爲腳本(F5),那麼你將在 '腳本輸出' 窗格中得到這樣的:

Bind Variable "xyz" is NOT DECLARED 

如果您將其作爲語句(control-enter)運行,則會提示您輸入綁定值,結果將顯示在「查詢結果」窗格中。

如果您確實需要作爲腳本運行,您可以在AlexisSTDM顯示的查詢中使用替換變量,或者您可以將其保留爲綁定變量,但使用variable命令聲明該變量併爲其分配值替代變量 - 這意味着你的實際查詢不需要被硬解析爲每個新的價值:

variable xyz varchar2(1) 
exec :xyz := '&abc'; 
select * from dual where dummy = :xyz; 

當因爲你會被提示輸入替代變量abc腳本運行,並將該值然後分配給查詢使用的綁定變量xyz。一個稍微更通用的查詢,並在提示時提供的價值X,在「腳本輸出」窗格顯示:

old:exec :xyz := '&abc' 
new:exec :xyz := 'X' 
anonymous block completed 
DUMMY 
----- 
X  

您可以將exec前添加set verify off隱藏舊/新線,並能set feedback off隱藏anonymous block completed行,如果需要真實查詢的反饋,可選擇將其重新打開。如果您願意,您可以使用exec來設置一個固定值,但是如您在本例中詢問的提示並不真正相關;並且如果腳本中有多個綁定值,則可以從匿名PL/SQL塊中將它們全部設置,而不是多次使用exec快捷方式。

2

如果您使用的是程序綁定變量,您可以使用綁定變量通過以下方式

創建查詢存儲在本地變量 用於例如,作爲動態的手段。

create procedure PROC (output_result out SYS_REFCURSOR) as l_query varchar2(1000) := Null; begin l_query := 'Select * from emp where ename = :xyz'; OPEN output_result FOR l_query using xyz; End PROC ;