PostgreSQL 11 - 程序

标签 postgresql plpgsql postgresql-11

拥有最新更新的PostgreSQL配套程序。官方博客引用了“与函数相反,程序不需要返回值。” ( https://blog.2ndquadrant.com/postgresql-11-server-side-procedures-part-1/ )

所以我的问题是,实际上有什么方法可以让我在过程中返回错误代码或响应吗? (过程在 Postgres 中是相当新的,因此在线资源很少。)

这是我返回这些“错误代码”的意思的示例

create or replace PROCEDURE multislot_Update_v1
(
  p_id in varchar2,
  p_name in varchar2,
  p_enname in varchar2,
  results out SYS_REFCURSOR
) AS
rowNumber int;
defaultNumber int;
BEGIN

   select count(1) into rowNumber from MULTISLOTSGAME where fid=P_id;

    if (rowNumber = 0) then
      open results for
      select '1' as result from dual;
      return;
    end if;

  update MULTISLOTSGAME  set
    name = P_name,
    enname = P_enname
  where fid = P_id ;
  commit;

 open results for
  select '0' as result, t1.* from MULTISLOTSGAME t1 where fid = p_id;

END multislot_Update_v1;

上面的脚本是一个Oracle过程,你可以看到如果返回结果是“1”就说明更新不成功。

有什么方法可以将上述脚本(带有错误代码)编写为 PostgresSQL 过程?也许使用“INOUT”参数的例子会很棒!

最佳答案

您可以在过程中使用 INOUT 参数。

您使用 CALL 调用过程陈述;如果有任何 INOUT 参数,该语句将像 SELECT 一样返回结果行。

这是一个使用返回 refcursor 的过程的示例:

CREATE PROCEDURE testproc(INOUT r refcursor) LANGUAGE plpgsql AS
$$BEGIN
   r := 'cur';
   OPEN r FOR VALUES (1), (42), (12321);
END;$$;

BEGIN;

CALL testproc(NULL);

  r  
-----
 cur
(1 row)

FETCH ALL FROM cur;

 column1 
---------
       1
      42
   12321
(3 rows)

COMMIT;

关于PostgreSQL 11 - 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50940438/

相关文章:

sql-server - 将数据从 MS SQL 迁移到 PostgreSQL?

postgresql - 将 pgAdmin3 连接到 Heroku postgreSQL DB 时出现 SSL 错误

postgresql - 在 Postgres (plpgsql) 中用单引号替换双引号

sql - plpgsql 中采用 bigint 的 pseudo_encrypt() 函数

postgresql - 需要在 PostgreSQL 中的外部表上进行并行追加

postgresql - 如何在PostgreSQL中实现 `BEGIN ATOMIC`

postgresql - 当对 TABLE1 进行 SELECT 查询时,如何创建一个将 TABLE1 的值插入到 TABLE2 的规则

sql - 适当的 SELECT 语句

sql - 仅选择列包含特定数值的表

postgresql - "ERROR: invalid transaction termination"尝试使用嵌套事务控制执行过程时