Cursor teradata中的For循环游标

Cursor teradata中的For循环游标,cursor,teradata,dynamic-sql,Cursor,Teradata,Dynamic Sql,在我的Teradata存储过程中,我希望有一个针对动态sql的for循环游标 下面是代码片段 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 mtc

在我的Teradata存储过程中,我希望有一个针对动态sql的for循环游标

下面是代码片段

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
我的意思是,我可以先框定动态sql,然后在其上有一个for循环游标,还是只需要有一个静态sql查询就可以使用游标声明


请澄清

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

下面是创建宏的SQL语句,该宏根据我对存储过程片段的解释返回结果集:

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;
);
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;
);