0

我需要一个在表中循环的存储过程,该表返回 db2 中表的名称,并且根据该名称,我需要从命名表中执行 select 语句。我已经尝试以多种方式使用“立即执行”来执行此操作,以至于丢失了这里的计数是立即执行的示例:

set insertstring = 'INSERT INTO pribpm.TEMP_T_TOQUE_CICLO (idSemana,tiempo_ciclo,tiempo_toque) 
SELECT  to_number(to_char( '''|| ' time_stamp ' ||'''  ,' || ' IW ' || ')) ,SUM(KPITOTALTIMECLOCK),SUM(s.KPIEXECUTIONTIMECLOCK) FROM ' ||  TABLA  || ' where     to_number(to_char( '''|| ' time_stamp ' ||''' ,' || ' IW ' || ')) between  ' ||     (to_number(to_char(FECHA,'IW'))-3) || ' and  ' || to_number(to_char(FECHA,'IW')) || ' GROUP     BY  to_number(to_char('''|| ' time_stamp ' ||''' ,'  || ' IW ' || '))';    
PREPARE stmt FROM insertstring; 
EXECUTE IMMEDIATE insertstring;    

其中,tabla 是包含表名称的字符串,fecha 是时间戳类型的日期

除了我用这样的游标尝试过

set select_ = 'SELECT time_stamp, KPITOTALTIMECLOCK, KPIEXECUTIONTIMECLOCK FROM ' || tabla;
PREPARE stmt FROM select_;
FOR v2 AS
c2 cursor for
execute select_ 
do    
if to_number(to_char(time_stamp,'IW')) between 
     (to_number(to_char(fecha,'IW'))-3) and to_number(to_char(fecha,'IW'))  then
--something here
end if;
END FOR;

但没有成功。

请问您或有人可以帮我清除我的错误或就我试图做的事情提供一些其他想法吗?这一切都在 db2 环境中

4

1 回答 1

0

编写一个过程并从 SYSCAT.TABLES 循环表以获取表名,然后再次循环以触发每个表的选择查询。

我不是 100% 确定,因为我在 db2 上工作了很长时间

于 2013-07-25T11:46:20.667 回答