如何在 pgAdmin 中运行真正的过程并评估结果



我还没有看到任何问题可以涵盖我所问的所有内容,所以为了笑容,我在这里发布我的旅程。

任务: 在 pgAdmin 中运行 Postgres 中的过程(不是函数(。评估结果并将其报告给屏幕上的用户。

对于我的情况,我有一个具有以下签名的程序:

CREATE OR REPLACE PROCEDURE sqls.transform_main(
INOUT returnval integer)
LANGUAGE 'plpgsql'
...

如何做到这一点?

回复(使用代码(杰里米的回复...

好的,我正在了解您的解决方案的工作原理。不过有一个问题...

我想传入一个实际变量,该变量以这样一种方式定义,以便我可以计算返回值。(假设这是一个扩展脚本,我不想变成另一个存储过程或函数......

我可以通过你的方法做到这一点吗?我认为不,因为当我将其设置为脚本(而不是单个SQL调用(时,我丢失了在您的版本中看到的输出,正如您在"数据输出"选项卡中所指出

的。
DO
$$
declare return_val integer;
declare return_msg text;
declare notify_msg text := 0;
BEGIN
call test(return_val); -- I never see what this value is unless...
if (return_val != 0) then
notify_msg = 'Failure (' || return_val || ')';
else
notify_msg = 'success!';
end if;
RAISE NOTICE 'Return value is %', notify_msg; -- ...unless I do something like this
END
$$

对我有用的答案:

(编辑:listen virtual;添加到下面的代码中(

DO
$$
declare x integer;
declare y text;
BEGIN
listen virtual;
call sqls.transform_main(x);
y = 'Return value: ' || x;
perform pg_notify('virtual', y);
END
$$

如果其他人可以改进这一点,我全听。只是感谢一些事情,在这一点上,在任务上燃烧的时间比我想承认的要多。

我把它放在这里,因为在注释中粘贴代码没有帮助。 下面是 psql 中的一个示例。 它在 pgadmin 中类似,只是结果显示在"数据输出"窗口中。

# CREATE OR REPLACE PROCEDURE test(
INOUT returnval integer)
LANGUAGE 'plpgsql' AS
$$
BEGIN
returnval := returnval;
END;
$$
;
CREATE PROCEDURE
# call test(1);
returnval
-----------
1
(1 row)

最新更新