【问题标题】:Stored Procedure error in POSTGRESQL PGADMIN4POSTGRESQL PGADMIN4 中的存储过程错误
【发布时间】:2021-02-01 01:31:36
【问题描述】:

当我尝试在 PGADMIN4 中创建存储过程或存储函数时,出现以下错误。我该如何解决它:

错误:“程序”处或附近的语法错误

第 1 行:创建或替换过程转移(

创建表格的代码:

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('Bob',10000);
insert into accounts(name,balance) values('Alice',10000);

我添加以下存储过程后收到错误:

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;$$

【问题讨论】:

  • 抱歉,我无法在上面正确添加导致问题的代码:create or replace procedure transfer(sender int, receiver int, amount dec) language plpgsql as $$ begin -- 减去来自发件人帐户的金额更新帐户设置余额 = 余额 - 金额,其中 id = 发件人; -- 将金额添加到接收方的账户更新账户设置余额 = 余额 + 金额 其中 id = 接收方;犯罪;结束;$$
  • Postgres 9.4 是no longer supported,它不支持过程。您应该尽快计划升级。

标签: sql postgresql stored-procedures postgresql-9.4 sql-function


【解决方案1】:

程序仅适用于从 11 版开始的 Postgres,而您使用 9.4 版标记了您的问题。

在早期版本中,您可以改用 void 函数。基本上,替换:

create or replace procedure transfer(sender int, receiver int, amount dec)
language plpgsql    
as $$
begin
    ...
end; $$

与:

create or replace function transfer(sender int, receiver int, amount dec)
returns void
language plpgsql    
as $$
begin
    ...
end; $$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多