2016-12-16 1 views
0

Я пишу процедуру Netezza и пытаюсь написать вставку с переменной в предложении FROM. Но Netezza, кажется, не допустить этого, как я получаю сообщение об ошибке:Переменные Netezza в идентификаторах

'INSERT INTO pkcount SELECT COUNT (*) Sk FROM $ 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 для того, чтобы включить переменную как часть запроса

Ниже прок должны работать

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

Смежные вопросы