例如。
--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(数字int:= 1) - 这个方法对我不起作用。
这有效:
CREATE OR REPLACE FUNCTION f1(number int = 1) ...
因为:=
是PL/pgSQL的赋值运算符,而它是SQL的=
。此相关问题下的详细信息:
而CREATE FUNCTION
是一个SQL语句,即使在创建plpgsql函数时也是如此。
在plpgsql内部,两种变体都被接受,但只有:=
是正确的。 =
是容忍的,因为它是人们犯下的这种普遍的错误。 (更新:自第9.4页以来,两种变体都有记录。)但是,有一些情况下必须区分。例如,当用named parameters调用上面的函数时。它一定要是:
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;
丢弃结果时使用qazxsw poi语句或使用void返回:
PERFORM