NZSQL/CODE - 如何在 Netezza 中使用 PRINT

Posted

技术标签:

【中文标题】NZSQL/CODE - 如何在 Netezza 中使用 PRINT【英文标题】:NZSQL/CODE - How to use PRINT in Netezza 【发布时间】:2015-02-12 21:16:55 【问题描述】:

我们正在为 Netezza SQL 使用 Aginity Workbench,我想知道是否有人知道 NZSQL 中用于 TSQL“PRINT”功能的等价物?

当有人尝试执行不应该重写数据的查询时,我们使用它来打印错误,而我发现的唯一解决方案是使用 netezza 命令行“-t”。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用 RAISE 来执行此操作,如 here 所述。

这是一个例子:

CREATE OR REPLACE PROCEDURE RAISE_DEMO()
RETURNS VARCHAR(ANY)
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
MYNAME varchar;
BEGIN
MYNAME := 'SCOTT';

RAISE NOTICE 'Hello, %', MYNAME;

END;
END_PROC;

TESTDB.ADMIN(ADMIN)=> call raise_demo();
NOTICE:  Hello, SCOTT
 RAISE_DEMO
------------

(1 row)

如果将 NOTICE 更改为 EXCEPTION,则执行将停止。

CREATE OR REPLACE PROCEDURE RAISE_DEMO()
RETURNS VARCHAR(ANY)
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
MYNAME varchar;
BEGIN
MYNAME := 'SCOTT';

RAISE EXCEPTION 'Hello, %, this is an exception', MYNAME;

RAISE NOTICE 'You should not see this message';

END;
END_PROC;

TESTDB.ADMIN(ADMIN)=>  call raise_demo();
ERROR:  Hello, SCOTT, this is an exception
TESTDB.ADMIN(ADMIN)=>

此行为记录在我在顶部提供的链接中。

【讨论】:

感谢您的回复,斯科特。有没有办法让加薪通知根据逻辑停止查询?我们在 TSQL 中使用的是: IF Col1=Col2 BEGIN PRINT N' My Custom Comment Here' RETURN END ELSE 编辑了答案以涵盖该问题。 再次感谢您的帮助,斯科特。非常感激。打算搞砸这个,我认为这对我们有用!

以上是关于NZSQL/CODE - 如何在 Netezza 中使用 PRINT的主要内容,如果未能解决你的问题,请参考以下文章

NZSQL/CODE - 在查询开始时使用 [DATABASE NAME]

如何在 Netezza 中执行矩阵运算?

如何在netezza中制作时间维度?

如何在 Netezza 中比较日期?

如何在 Netezza 的存储过程中使用 CASE 语法

如何在 Netezza 中根据主键生成 GROUP BY 脚本