簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM