2017-04-19 25 views
1

我正在編寫一個腳本,其中多個後續過程需要一個過程的輸出。所以,我需要綁定變量,而不是替代變量。但是,無論何時使用變量,它都被清除。這使得不可能多次使用變量的值。完全相同的腳本適用於SQL * Plus。我在下面製作了一個簡短的腳本,說明了這個問題。SQL Developer清除腳本中的綁定變量

這是可以在SQL Developer中更改的設置嗎?這是一個錯誤?在我的情況下,我正在使用SQL Developer版本4.1.5.21.78。

var x varchar2(1) 
var y varchar2(1) 
print x 
print y 
exec :x := 'Z'; 
exec :y := 'Z'; 
print x 
print y 
exec :x := :y; 
-- Why did that last line clear y? 
print x 
print y 

輸出

X 
------ 


Y 
------ 


PL/SQL procedure successfully completed. 


PL/SQL procedure successfully completed. 


X 
- 
Z 

Y 
- 
Z 

PL/SQL procedure successfully completed. 


Y 
- 


X 
- 
Z 
+0

我在4.2.0.17中看不到,最後兩個打印命令都顯示Z.(您輸出的順序與代碼不匹配,但仍......)。儘管如此,我也發現4.1.5.21中的問題,所以它在該版本中看起來像是一個bug。升級似乎是一種解決方法? –

+0

我認爲這可能是此錯誤的另一個示例:https://stackoverflow.com/q/43401127/84206 – AaronLS

回答

1

這似乎是在4.1.5中的錯誤,可能還有其他的版本,已固定的4.2.0.17版本。

exec僅僅是一個匿名塊的包裝,而是使用一個明確的塊,而不是也說明了問題:

begin 
    :x := :y; 
end; 
/

我敢肯定,我已經看到了這個報道之前,但唯一的例子,我可以找到is this question;作爲筆記,你可以解決它的價值重新分配給自己:

begin 
    :x := :y; 
    :y := :y; 
end; 
/

還是略顯不足可讀取:

exec :x := :y; :y := :y; 

這當然似乎是一個錯誤,但因爲它是固定在當前版本,upgrading似乎是一個明智的方式來解決它。否則,您需要向Oracle提出服務請求 - 儘管我懷疑他們會建議升級。我可能一直在思考回到this,但這似乎是一個不同的問題,因爲該示例在4.1.5中看起來不錯,在My Oracle Support中我看不到任何錯誤報告,無論是問題;但它們並不總是發佈)

+1

我升級到4.2.0.17.089.1709,問題就消失了。我試圖通過先將它分配給第二個變量來解決問題,但這並不奏效,因爲它將問題轉移到了新的一行。但我看到你如何把這兩條線放在一起。這可能會奏效,但我不應該這樣做,我已經繼續前進。謝謝。 –

相關問題