[英]How can I use multiple values in SQL variable in PostgresSQL/plpgsql?
[英]Plpgsql: How can i assign value to variable at declaration section?
例如。
--Assigning value to variable in function as a parameter.
create or replace function f1(number int :=1) --This method is not working to me.
要么
--Assigning values to variables at declaration section.
declare
number int :=1; -- Here i need to assign the value to number but its not working.
name varchar :='xyz';
這是您可以執行的操作:
create or replace function f1(my_number int default 1)
要么
declare
my_number int :=1;
查看聲明文件
還有更多。
創建或替換函數f1(number int:= 1)-此方法對我不起作用。
這有效:
CREATE OR REPLACE FUNCTION f1(number int = 1) ...
因為:=
是PL / pgSQL的賦值運算符,而對於SQL是=
。 有關此問題的詳細信息:
即使創建plpgsql函數, CREATE FUNCTION
也是一條SQL語句 。
在plpgsql中,兩個變體都可以接受,但是只有:=
是正確的。 可以容忍=
,因為這是人們普遍犯的錯誤。 (更新:自pg 9.4起,這兩個變體都記錄在案。)但是,在某些情況下,必須進行區分。 例如,當使用命名參數 調用上述函數時。 它一定要是:
SELECT * FROM f1(number := 1);
更好的是,在Postgres 9.5或更高版本中,在函數調用中使用=>
進行參數分配:
SELECT * FROM f1(number => 1);
帶有:
SELECT * FROM f1(number = 1);
... Postgres會將number = 1
解釋為SQL表達式並嘗試對其求值,首先在調用語句的外部范圍中查找標識符number
。 如果找不到,則會得到:
ERROR: column "number" does not exist
那是幸運的情況,也是更常見的情況。 如果可以在調用語句的范圍內找到number
並且可以將評估后的boolean
表達式作為函數參數接受,那么您已經成功構建了一個邪惡陷阱 。 如果您一開始不了解:=
和=
之間的區別,就很難調試。
(關於將值分配給聲明部分之外的變量)
PLpgSQL語言的語法有多種說法:
Y := f(X);
EXECUTE
子句僅用於“動態執行”( 性能較低 ),
EXECUTE 'f(X)' INTO Y;
使用Y := f(X);
或SELECT
執行靜態聲明,
SELECT f(X) INTO Y;
丟棄結果或使用無效回報時,請使用PERFORM語句:
PERFORM f(X);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.