例如。
--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';
答案 0 :(得分:2)
以下是如何做到这一点:
create or replace function f1(my_number int default 1)
或
declare
my_number int :=1;
答案 1 :(得分: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
表达式作为函数参数,那么您已成功构建了邪恶陷阱< / strong>即可。如果您首先不了解:=
和=
之间的区别,则难以调试。
答案 2 :(得分:0)
(关于为声明部分的变量赋值)
语言PLpgSQL语法有很多方法可以说:
Y := f(X);
EXECUTE
子句仅用于&#34;动态执行&#34; (表现不佳),
EXECUTE 'f(X)' INTO Y;
使用Y := f(X);
或SELECT
执行静态声明,
SELECT f(X) INTO Y;
在放弃结果时使用PERFORM声明或使用void返回:
PERFORM f(X);