如何在 Netezza 中运行代码块

Posted

技术标签:

【中文标题】如何在 Netezza 中运行代码块【英文标题】:How to run code block in Netezza 【发布时间】:2014-02-24 15:23:46 【问题描述】:

我正在尝试在 Aginity for Netezza 中运行一些代码,而不将其放入存储过程中,但我无法获得正确的语法。下面是一些示例代码。它给出了诸如“发现“DECLARE”(在字符 1 处)需要关键字之类的错误。如果我将代码放在存储过程中,它将运行良好。

declare
cnt integer;
rVend record;

begin

FOR rVend in select vend_skey, vend_lvl_1_cd from dim_vend loop
    select count(*) into cnt
    from dim_vend 
    where vend_lvl_1_cd = rVend.vend_lvl_1_cd and vend_skey < rVend.vend_skey;

    if cnt > 0 then
        update dim_vend
        set to_delete = 1 where vend_skey = rVend.vend_skey;
    end if;

end loop;

end;

【问题讨论】:

我也面临同样的问题,能否分享一下,请更正代码。 @Niks - 你不能运行这样的代码,除非它在一个存储过程中。所以那里的代码是正确的,只需要使用 CREATE PROCEDURE 语法将其放入存储过程中,然后您就可以使用 EXEC 调用该过程。 好的...谢谢凯利 【参考方案1】:

问题在于 Netezza 不允许在存储过程之外使用变量。

如果您使用 Aginity Workbench 来查询您的数据库,您可以使用“参数替换”作为解决方法。这基本上是 Workbench 在运行 SQL 之前实现的查找和替换。语法是$ParamName

【讨论】:

谢谢-我将停止尝试使该代码正常工作:) 参数替换不适用于此特定查询,但将来可能会有所帮助。

以上是关于如何在 Netezza 中运行代码块的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenMP 中,我们如何并行运行多个代码块,其中每个代码块包含 omp single 和 omp for 循环?

如何在 Postgres 中异步运行代码块(如作业)?

如何在代码块中运行我的程序之前设置/取消设置环境变量

在 Erlang 中运行 C 代码块

如何在 SSMS 的块中分隔 SQL 代码?

如何使自定义标签中的代码块仅在第一次调用该标签时运行?