【问题标题】:For loop cursor in teradatateradata中的for循环游标
【发布时间】:2016-02-12 04:30:34
【问题描述】:

在我的 Teradata 存储过程中,我想要一个针对动态 sql 的 for 循环游标。

下面是代码sn-p

SET get_exclude_condition = '';

SET colum_id = 'SELECT MIN (parent_criteria_id) ,MAX (parent_criteria_id)  FROM  arc_mdm_tbls.intnl_mtch_criteria WHERE act_ind = 1 AND criteria_typ = ''Exclude'' AND mtch_technique_id ='||mtch_technique_id||';' ;
PREPARE input_stmt FROM colum_id;
OPEN flex_cursor;
FETCH flex_cursor INTO parent_criteria_id_min , parent_criteria_id_max ;
CLOSE flex_cursor;

SET get_exclude_condition = '';

WHILE (parent_criteria_id_min <=  parent_criteria_id_max)
DO

    SET get_exclude_condition = get_exclude_condition || '(  ';

    SET for_loop_stmt = 'SELECT criteria  FROM arc_mdm_tbls.intnl_mtch_criteria WHERE act_ind = 1 AND mtch_technique_id ='||mtch_technique_id||' AND criteria_typ= ''Exclude'' AND parent_criteria_id ='||parent_criteria_id_min||';';

    FOR for_loop_rule AS c_cursor_rule CURSOR FOR 
        for_loop_stmt
    DO

我可以像这样声明一个for循环游标吗? 还是我只需要这样的东西?

FOR for_loop_rule AS c_cursor_rule CURSOR FOR 
        SELECT rule_id 
        FROM arc_stage_tbls.assmt_scoring_rules 
        WHERE rule_typ = :v_RuleType
        ORDER BY rule_id
DO  

我的意思是我可以先构建动态 sql,然后在其上添加一个 for 循环游标,或者仅使用游标声明我需要一个静态 sql 查询吗?

请澄清。

【问题讨论】:

    标签: cursor teradata dynamic-sql


    【解决方案1】:

    虽然您没有发布存储过程试图完成的所有内容,但您所要求的似乎可以使用基于 SET 的逻辑而不是循环游标来完成。如果您需要参数化“mtch_technique_id”,您可以使用 Teradata 宏,它允许您维护基于 SET 的方法。

    以下是用于创建宏的 SQL,该宏根据我对存储过程的 sn-p 试图完成的内容的解释返回结果集:

    REPLACE MACRO {MyDB}.Intnl_Mtch_Criteria(mtch_technique_id INTEGER) AS
    (
    SELECT criteria  
      FROM arc_mdm_tbls.intnl_mtch_criteria 
      WHERE act_ind = 1 
        AND (much_technique_id, criteria_typ) IN
            (SELECT MIN((parent_criteria_id), MAX (parent_criteria_id)  
               FROM  arc_mdm_tbls.intnl_mtch_criteria 
              WHERE act_ind = 1 
                AND criteria_typ = 'Exclude' 
                AND mtch_technique_id = :mtch_technique_id;
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多