2016-06-09 36 views
2

我的SQL腳本包含以下內容:使用組可變

\set test 'some value' 
DO $$DECLARE 
    v_test text:= :'test'; 
BEGIN 
    RAISE NOTICE 'test var is %',v_test; 
END$$; 

我在嘗試評估測試的值時,語法錯誤:

ERROR: syntax error at or near ":" 

理想我喜歡有一個匿名plpqsql塊生活在一個文件中,然後使用一組環境變量從shell腳本中調用

+0

這個答案證明的替代解決方案的重複。 –

回答

0

解釋是,according to the manual

變量插值不會在帶引號的SQL文字和標識符中執行。

DO聲明的正文是一個美元引用的字符串。所以在字符串裏面沒有插值。

由於它必須是文字字符串,因此您也可以不用動態連接字符串。 The manual:

這必須指定爲字符串文字,就像在CREATE FUNCTION中一樣。

但是,您可以連接字符串,然後執行它。

\set [ name [ value [ ... ] ] ] 

設置PSQL變量名值,或如果超過給出一個值 ,他們所有人的串聯。

大膽強調我的。你只需要得到合適的報價:

test=# \set test 'some value' 
test=# \set code 'DECLARE v_test text := ' :'test' '; BEGIN RAISE NOTICE ''test var is: %'', v_test; END' 
test=# DO :'code'; 
NOTICE: test var is: some value 
DO 
test=# 

但我寧願創建(臨時)功能,並通過該值作爲參數(如psql的插補工作)。在此dba.SE相關答案細節: