【问题标题】:Teradata : Stored Procedure : parameter column nameTeradata:存储过程:参数列名
【发布时间】:2015-07-16 08:52:08
【问题描述】:

我正在寻求有关 teradata 中存储过程的帮助。我想更新整个表,为此我尝试使用 for 循环游标。问题是我的更新是通过将参数传递给 SP 的列名来定义的。

我已经看到可以使用动态 sql 来做到这一点,但我还没有找到有关 for 循环游标和动态 sql 主题的任何信息。 FOR LOOP CURSOR 可以吗? 我尝试只使用动态 sql 进行选择和计算,它工作正常,但问题是从选择上的光标更新表。在这种情况下如何从我的光标更新表格?

我让你展示我的代码。

循环光标:

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'.

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

【问题讨论】:

    标签: stored-procedures cursor teradata


    【解决方案1】:

    调用语句应包含所有输入参数,确保正确指定所有输入参数。请提供您的通话声明。

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 2017-09-18
      • 1970-01-01
      • 2017-10-07
      • 2020-02-23
      • 2010-12-09
      • 2014-01-01
      • 2012-07-26
      • 2018-11-19
      相关资源
      最近更新 更多