标识符中的 Netezza 变量

Netezza Variables In Identifiers

我正在编写一个 Netezza 过程并尝试在 FROM 子句中编写一个带有变量的插入。但是 Netezza 似乎不允许这样做,因为我收到错误:

'INSERT INTO pkcount SELECT count(*) sk FROM ' 错误 ^ 找到“$1”(在字符 53)期望标识符找到关键字

CREATE OR REPLACE PROCEDURE check_tbl (varchar(255))
RETURNS integer
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE 
tbl_name  ALIAS FOR ;
BEGIN

CREATE TEMP TABLE pkcount (sk bigint);

INSERT INTO pkcount
SELECT count(*) sk FROM tbl_name;

END;
END_PROC;

您需要创建动态 sql 以便将变量作为查询的一部分包含在内

下面的过程应该有效

CREATE OR REPLACE PROCEDURE check_tbl (varchar(255))
RETURNS integer
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE 
tbl_name  ALIAS FOR ;
sql char(1000);
BEGIN

CREATE TEMP TABLE pkcount (sk bigint);

sql := 'INSERT INTO pkcount SELECT count(*) sk FROM '||tbl_name;
execute immediate sql;
RAISE NOTICE 'SQL Statement: %', sql;

END;
END_PROC;

以防万一您想检查 sql 声明,因此添加了 RAISE NOTICE。