Plpgsql:如何在声明部分为变量赋值?

问题描述 投票:0回答:3

例如。

--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'; 
postgresql plpgsql
3个回答
2
投票

以下是如何做到这一点:

create or replace function f1(my_number int default 1)

要么

declare
my_number int :=1;

看看declaration documentation


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表达式可以被接受为函数参数,那么您已经成功构建了一个邪恶的陷阱。如果您不了解:==之间的区别,那么很难调试。


0
投票

分配值,一般说明

(关于在声明部分之外为变量赋值)

语言PLpgSQL语法有很多方法可以说:

 Y := f(X);

EXECUTE子句仅用于“动态执行”(性能较差),

 EXECUTE 'f(X)' INTO Y;     

使用Y := f(X);SELECT执行静态声明,

 SELECT f(X) INTO Y;

丢弃结果时使用qazxsw poi语句或使用void返回:

PERFORM
© www.soinside.com 2019 - 2024. All rights reserved.