繁体   English   中英

将Teradata动态存储过程插入表SQL

[英]Insert Into table Teradata dynamic stored procedure SQL

我正在尝试在Teradata中创建一个存储过程,该存储过程将接受各种参数。 我的查询有4个SQL传递,在其中创建了3个易失表。 Select语句中包含需要动态化的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语句是动态的,因为在其中,我具有希望传递的Department和Sections参数。 例如

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帮助我开始了这项工作,因此非常感谢您提供更多帮助。

您没有告诉您要使用Dynamic SQL进行INSERT/SELECT ,仅当您想从SP返回结果集时才需要游标。

DECLARE q1 VARCHAR(10000);

SET q1 = 'INSERT INTO Select * from mydb.tbl_1 where Department_ID = ' || TRIM(DepID) ||';';

EXECUTE IMMEDIATE q1;

但是,如果仅传递给WHERE条件的值应该是动态的,则最好应用一条准备好的语句(可以多次使用):

SET q1 = 'INSERT INTO Select * from mydb.tbl_1 where Department_ID = ?;';

PREPARE stmt FROM q1;

EXECUTE stmt USING DepID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM