Ich versuche, eine gespeicherte Prozedur in Teradata zu erstellen, die verschiedene Argumente akzeptiert. Meine Abfrage hat 4 Durchläufe von SQL, wo es 3 Lose von flüchtigen Tabellen erstellt. Innerhalb der SELECT-Anweisungen ist die SQL, die ich dynamisch sein muss, und hier stößt ich auf Probleme.Einfügen in Tabelle Teradata dynamische gespeicherte Prozedur SQL
Hier ist meine SQL:
CREATE PROCEDURE "mydb"."test_sp20" (DepID integer) --DepID is my parameter
DYNAMIC RESULT SETS 1 SQL SECURITY OWNER
BEGIN
DECLARE q1 VARCHAR(10000);
DECLARE cur1 CURSOR WITH RETURN ONLY TO client FOR s1;
CREATE VOLATILE TABLE mydb.tbl_1 , no fallback, no log(
Consumer_Unit_Id INTEGER,
Price_Promotion_Id INTEGER,
Promotion_Id INTEGER)
primary index (Consumer_Unit_Id, Price_Promotion_Id, Promotion_Id) on commit preserve rows ;
INSERT INTO mydb.tbl_1
SELECT * FROM mydb.tbl_1
SET q1 = 'Select * from mydb.tbl_1'
PREPARE s1 FROM q1;
OPEN cur1;
END;
Dies funktioniert als SP mit statischem SQL in Ordnung, aber ich brauche die Select-Anweisungen in der dynamisch zu sein in ihnen I Institut und Sections Parameter haben, die ich in der Lage sein will überholen. z.B.
INSERT INTO mydb.tbl_1
SQL = 'Select * from mydb.tbl_1 where Department_ID = ' || DepID ||'
Ich habe auch versucht:
SQL = 'INSERT INTO Select * from mydb.tbl_1 where Department_ID = ' || DepID ||'
In beiden Fällen wir die folgende Fehlermeldung erhalten:
7683: TEST_SP20:Invalid statement specified inside a dynamic declare cursor/SQL statement
Ich scheine einen dynamischen SQL-String zu haben, um die Lage sein, aber ich kann habe keinen INSERT INTO SELECT String ??
@dnoeth hat mir geholfen, dies zu starten, so wird jede weitere Hilfe sehr geschätzt.
Apologies, SQL ist nicht meine Stärke :) Dies hat tatsächlich funktioniert, so denke ich, was ich tun muss, ist nur die volatilen Tabellen erstellen und dann die Daten mit einer allgemeinen Select-Anweisung aus dieser Tabelle zurückziehen. Vielen Dank für Ihre Hilfe, ich schätze es wirklich. – MidnightDataGeek