當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


PostgreSQL CREATE PROCEDURE用法及代碼示例

PostgreSQL的創建程序使用顧名思義的語句 創建新的存儲過程。到目前為止,您已經學習了如何使用 create function 語句定義用戶定義的函數。

用戶定義函數的一個缺點是它們不能執行事務。換句話說,在用戶定義的函數中,您不能啟動事務,也不能提交或回滾它。 PostgreSQL 11 引入了支持事務的存儲過程。要定義新的存儲過程,請使用 create procedure 語句。

下麵說明了 create procedure 語句的基本語法:

用法:
create [or replace] procedure procedure_name(parameter_list)
language plpgsql
as $$
declare
-- variable declaration
begin
-- stored procedure body
end; $$

讓我們分析以上語法:

  • 首先,在後麵指定存儲過程的名稱創建程序關鍵字。
  • 其次,為存儲過程定義參數。存儲過程可以接受零個或多個參數。
  • 三、指定plpgsql作為存儲過程的過程語言。請注意,您可以為存儲過程使用其他過程語言,例如 SQL、C 等。
  • 最後,使用 dollar-quoted 字符串常量語法來定義存儲過程的主體。

存儲過程中的參數可以有 in 和 inout 模式。他們不能有輸出模式。存儲過程不返回值。您不能像這樣在存儲過程中使用帶有值的 return 語句:



return expression;

但是,您可以使用返回沒有的聲明表達式立即停止存儲過程:

return;

例:

我們將使用以下帳戶演示表:

drop table if exists accounts;

create table accounts (
    id int generated by default as identity,
    name varchar(100) not null,
    balance dec(15, 2) not null,
    primary key(id)
);

insert into accounts(name, balance)
values('Raju', 10000);

insert into accounts(name, balance)
values('Nikhil', 10000);

以下查詢將顯示表數據:

select * from accounts;

結果如下圖所示:

以下查詢創建一個名為的存儲過程轉移將指定數量的資金從一個帳戶轉移到另一個帳戶。

create or replace procedure transfer(
   sender int,
   receiver int, 
   amount dec
)
language plpgsql    
as $$
begin
    -- subtracting the amount from the sender's account 
    update accounts 
    set balance = balance - amount 
    where id = sender;

    -- adding the amount to the receiver's account
    update accounts 
    set balance = balance + amount 
    where id = receiver;

    commit;
end;$$

調用存儲過程

要調用存儲過程,請使用CALL聲明如下:

call stored_procedure_name(argument_list);

例:

下麵語句調用轉移轉移存儲過程1, 000 美元從 Raju 的賬戶到 Nikhil 的賬戶:

call transfer(1, 2, 1000);

下麵的語句驗證了數據帳戶轉移後的表格:

SELECT * FROM accounts;

輸出:

相關用法


注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL – CREATE PROCEDURE。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。