我正在寻找有关teradata存储过程的帮助。我想更新整个表格,为此我尝试使用for循环游标。问题是我的更新是通过将参数传递给SP的列名来定义的。
我已经看到可以使用动态sql来做到这一点,但我还没有找到关于循环游标和动态sql的主题的任何信息。 FOR LOOP CURSOR有可能吗? 我试图只用动态sql做select和calculs,它运行正常但问题是从select上的光标更新表。在这种情况下如何从光标更新表?
我让你展示我的代码。
循环光标:
REPLACE PROCEDURE [database].calDELAI
(
IN dateDebut VARCHAR(30),
IN dateFin VARCHAR(30),
IN delay VARCHAR(30)
)
BEGIN
DECLARE DATE_DEBUT_COLONNE VARCHAR(64);
DECLARE DATE_FIN_COLONNE VARCHAR(64);
SET DATE_DEBUT_COLONNE=dateDebut;
SET DATE_FIN_COLONNE=dateFin;
FOR for_loop_update AS cur_select_set CURSOR FOR
SELECT
TMP.DATE_FIN_COLONNE-TMP.DATE_DEBUT_COLONNE
FROM [database].ORD_T_DETL_ORDR_DELAI AS TMP
/* the select is more complicated but here is the spirit of it.*/
DO
IF (delay='DELAI1') THEN SET DELAI1=NB_JR_OUVRABLE;
END IF;
END FOR ;
END ;
teradata给出的错误是:
SPL1027:E, Missing/Invalid SQL statement'E(3810):Column/Parameter '[database].TMP.DATE_FIN_COLONNE' does not exist.'.
SPL2001:E, Undefined symbol 'DELAI1'.
SPL2001:E, Undefined symbol 'NB_JR_OUVRABLE'.
提前感谢您的回复和帮助。
答案 0 :(得分:0)
call语句应包含所有输入参数,确保正确指定所有输入参数。你能否提供你的电话声明。