2017-06-05 59 views
1

我想傳遞列名作爲參數。在這裏,我寫了一個查詢來從表用戶中選擇「user_id」列,但是它將user_id作爲文本返回。列名作爲變量

EXECUTE format('SELECT $1 FROM users 
WHERE name=''name''') 
USING 'user_id'; 

我該怎麼做?

+1

您無法傳遞列名作爲參數。您需要更改查詢字符串。 –

回答

0

你不能使用動態SQL來獲得這個結果嗎?是這樣的:

EXECUTE 'SELECT '|| get_columns()|| ' FROM table_name' 
0

根據documentation ...

注意參數符號只能用於數據值 - 如果你 要使用動態確定表或列名,你必須 將它們以文本方式插入到命令字符串中。例如,如果 前面的查詢需要對動態選擇的表來完成...

因此,你需要像這樣

EXECUTE 'SELECT ' 
    || quote_ident(p_column) 
    || ' FROM users ' 
    || ' WHERE name = $1' 
    INTO v_result 
    USING name; 

p_column被作爲參數收到的列名的功能。
v_result是存儲結果的變量。如果你不關心結果,這個INTO部分可以被丟棄。
name是提供給where條件的值。必須在你的函數中的某個地方,或者作爲一個參數。