さまざまな引数を受け入れるTeradataでストアドプロシージャを作成しようとしています。私のクエリは3回の揮発性テーブルを作成するSQLの4回のパスを持っています。 Select文の中には、動的にする必要があるSQLがあります。これが問題に遭遇します。ここでテーブルに挿入Teradata動的ストアドプロシージャSQL
は私の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;
これは、静的SQLとSPとして正常に動作しますが、私は私ができるようにしたい部門とセクションのパラメータを持って、その中にその中に動的にするSelect文を必要とします横断する例えば
INSERT INTO mydb.tbl_1
SQL = 'Select * from mydb.tbl_1 where Department_ID = ' || DepID ||'
私も試してみた:私は次のエラーを取得、両方のケースで
SQL = 'INSERT INTO Select * from mydb.tbl_1 where Department_ID = ' || DepID ||'
:
7683: TEST_SP20:Invalid statement specified inside a dynamic declare cursor/SQL statement
を私は、動的SQL文字列を持つことができるように見えるが、私はできますINSERT INTO SELECT文字列がありませんか?
@dnoethがこれを開始してくれましたので、これ以上の助けをいただければ幸いです。
謝罪、SQLを私の強みではありません:)これは実際にはうまくいきました。私は、揮発性のテーブルを作成し、そのテーブルから一般的なselectステートメントでデータを取り戻すだけです。 ご協力いただきありがとうございます。本当にありがとうございます。 – MidnightDataGeek