4

带有最新更新的 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”参数的例子会很棒!

4

2 回答 2

8

过程中可以有INOUT参数。

CALL你用语句调用一个过程;如果有任何INOUT参数,该语句将返回一个结果行,就像SELECT.

这是一个使用返回 a 的过程的示例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;
于 2018-06-20T05:51:06.573 回答
0

如何使用 RAISE 语句?

https://www.postgresql.org/docs/10/static/plpgsql-errors-and-messages.html

于 2018-06-20T05:10:56.450 回答