标识符中的 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。
我正在编写一个 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。