Teradata:存储过程:参数列名

时间:2015-05-06 09:41:22

标签: stored-procedures cursor teradata

我正在寻找有关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'.

提前感谢您的回复和帮助。

1 个答案:

答案 0 :(得分:0)

call语句应包含所有输入参数,确保正确指定所有输入参数。你能否提供你的电话声明。