2016-12-16 61 views
0

我正在編寫一個Netezza過程並試圖在FROM子句中寫入一個帶有變量的插入。但Netezza公司似乎不允許這樣做,因爲我得到一個錯誤:標識符中的Netezza變量

'INSERT INTO pkcount SELECT COUNT(*)SK從$ 1' 錯誤^發現 「$ 1」(炭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

您需要以創建動態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。

+0

謝謝你的工作 – hidross