二、控制語句create [or replace] function function_name(引數逗號隔開) returns 返回值型別 as $body$
declare//宣告變數
變數名 變數型別 :=變數值;
例如:name char(20):='su';
begin
/*函式體;包括dml語句;
特別注意:如果有返回值,要省略最後的return語句的話,則在函式體的最後必須是乙個select語句且返回型別必須和上面宣告的型別一樣;
*/return 變數名//和上面返回的變數一樣;
end$body$
language 'plpgsql';
1、if 條件(五種形式)
if … then
if … then … else
if … then … else if
if … then … elsif … then … else
if … then … elseif … then … else(注:elseif 是elsif 的別名)
2、迴圈
使用loop,exit,continue,while, 和for 語句,可以控制pl/pgsql 函式重複一系列命令。
1)、loop
[ <> ]
loop
statements
end loop [ label ];
loop 定義乙個無條件的迴圈,無限迴圈, 直到由exit或者return語句終止。可選的label 可以由exit 和continue 語句使用, 用於在巢狀迴圈中宣告應該應用於哪一層迴圈。
2)、exit
exit [ label ] [ when expression ];
如果沒有給出label, 那麼退出最內層的迴圈,然後執行跟在 end loop 後面的語句。 如果給出 label, 那麼它必須是當前或者更高層的巢狀迴圈塊或者語句塊的標籤。然後該命名塊或者迴圈就會終止,而控制落到對應迴圈/塊的 end 語句後面的語句上。
如果宣告了when,迴圈退出只有在expression 為真的時候才發生, 否則控制會落到exit 後面的語句上。
exit 可以用於在所有的迴圈型別中,它並不僅僅限制於在無條件迴圈中使用。在和 begin 塊一起使用的時候,exit 把控制交給塊結束後的下乙個語句。
例如:loop 迴圈
if … then 條件判斷
exit ; 條件成立,則退出迴圈。
end if;
end loop;
3)、continue
continue [label ] [ whenexpression ];
如果沒有給出 label,那麼就開始最內層的迴圈的下一次執行。也就是說,控制傳遞歸給迴圈控制表示式(如果有),然後重新計算迴圈體。 如果出現了label,它宣告即將繼續執行的迴圈的標籤。
如果宣告了 when,那麼迴圈的下一次執行只有在expression 為真的情況下才進行。否則,控制傳遞給continue 後面的語句。
continue 可以用於所有型別的迴圈; 它並不僅僅限於無條件迴圈。
例如:loop
一些計算
exit when count > 100;
continue when count < 50;
一些在count 數值在 [50 … 100] 裡面時候的計算
end loop;
4)、while
[ <> ]
while expression loop
statements
end loop [ label ];
只要條件表示式為真,while語句就會不停在一系列語句上進行迴圈. 條件是在每次進入迴圈體的時候檢查的.
例如:while amount_owed > 0 and gift_certificate_balance > 0 loop
– 可以在這裡做些計算
end loop;
while not boolean_expression loop
– 可以在這裡做些計算
end loop;
5)、for(整數變種)
[ <> ]
for name in [ reverse ] expression … expression loop
statements
end loop [ labal ];
這種形式的for對一定範圍的整數數值進行迭代的迴圈。變數name 會自動定義為integer型別並且只在迴圈裡存在。給出範圍上下界的兩個表示式在進入迴圈的時候計算一次。 迭代步進值總是為 1,但如果宣告了reverse就是 -1。
一些整數for迴圈的例子∶
for i in 1…10 loop 表示1迴圈到10
這裡可以放一些表示式
raise notice 『i is %』, i;
end loop;
for i in reverse 10…1 loop
這裡可以放一些表示式
end loop;
如果下界大於上界(或者是在 reverse 情況下是小於),那麼迴圈體將完全不被執行。而且不會丟擲任何錯誤。
3、異常捕獲
exception
when 錯誤碼(如:string_data_right_truncation:字串資料右邊被截斷) then
/*後台列印錯誤資訊/
raise notice 『錯吳資訊』;
三、鏈結運算子
在postgresql中鏈結運算子是:||而不是+;
四、**示例
create or replace function f_test() returns void as $$
declare
begin
for i in 1..1000 loop
execute 'insert into test select generate_series('||(i-1)*40000+1||','||i*40000||'),(random()::float)*'||i*0.0001||',clock_timestamp()';
end loop;
end;
$$ language plpgsql;
Postgresql儲存過程
pg的儲存過程與oracle的稍微有點不一樣,它的結構是這樣的 語法 create or replace function function name arg1,arg2.returns return type as body declare 變數宣告 begin 函式體end body langu...
postgresql之儲存過程
特性 儲存過程舉例 1 引數列表只包含函式輸入引數,不包含輸出引數 儲存過程定義 create or replace function add a integer,b numeric returns numeric as select a b language sql 呼叫方法 select add...
postgresql儲存過程輸出引數
postgresql不區分儲存過程和函式,即這兩個是乙個東西。儲存過程通常用於比較複雜的操作中。建立儲存過程時 create or replace function 儲存過程名稱這個or replace是如果存在同名的儲存過程則替換,如果是第一次建立這個儲存過程的話可以不加or replace 儲存...