标识符中的Netezza变量

时间:2016-12-16 16:15:43

标签: sql variables procedure identifier netezza

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

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

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

CREATE TEMP TABLE pkcount (sk bigint);

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

END;
END_PROC;

1 个答案:

答案 0 :(得分:1)

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

proc下面应该有效

CREATE OR REPLACE PROCEDURE check_tbl (varchar(255))
RETURNS integer
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE 
tbl_name  ALIAS FOR $1;
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。