我一直想知道是否可以编写甲骨文“匿名块”脚本。 基本上运行任何 Redshift 过程代码,但在 SQL Workbench/J 等客户端中删除创建过程第一行?是否可能和/或我们是否需要在 SQL Workbench/J 中调整一些配置?
Declare
Xxx integer;
BEGIN
Null;
any PL/pgSQL code;
EXCEPTION when others
Raise xxx ;
END;
$$ LANGUAGE plpgsql;
或者 - 最终 - 使用 postgres 命令行 这可能/可以吗 https://www.postgresql.org/docs/current/app-psql.html
使用 postgres 命令行可以实现这一点吗
DO
命令 来实现此目的。你的例子会翻译成这样:
DO
$do$
DECLARE
xxx integer;
BEGIN
-- any PL/pgSQL code;
EXCEPTION WHEN OTHERS THEN -- optional
RAISE EXCEPTION 'My text: xxx';
END
$do$;
但是 Redshift 不支持这一点。在 8.0.2 版本分叉后,它在很多方面都有所不同。
您可以创建一个过程,其名称表明它是临时的。然后您可以运行该过程,然后将其删除。
虽然不是最优的,但它可以运行程序代码以进行调试或一次性目的。
这将与创建同名过程的其他用户发生冲突。在下面的示例中,我使用了带有我姓名缩写的过程名称。
create or replace procedure mh_test()
as
$$
declare
x float;
begin
<<Execute your code here>>
end;
$$
language plpgsql
;
call mh_test()
;
drop procedure mh_test();
;