2016-12-16 1 views
0

Im écrire une procédure Netezza et essayer d'écrire une insertion avec une variable dans la clause FROM. Mais Netezza semble ne pas permettre à ce que je reçois une erreur:Variables Netezza dans les identifiants

'INSERT INTO nombre de pkcount SELECT (*) sk de $ 1' erreur^trouvé "$ 1" (à ombles 53) attend un identifiant trouvé un mot-clé

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; 

Répondre

1

Vous devez créer sql dynamique afin d'inclure la variable comme une partie de la requête

ci-dessous proc doit travailler

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; 

Juste au cas où vous voulez vérifier l'instruction SQL, RAISE NOTICE est ajouté.

+0

Merci qui a travaillé – hidross