Db2 我想在循环中运行存储过程

Db2 我想在循环中运行存储过程,db2,Db2,我想在循环中运行sp。 我正在使用db2。 对于ex,如果我的表中有10行,并且8行包含状态为“已批准”,我希望这8行通过我的sp逐个执行 我用过这个方法 declare @v_count INT; declare @row_count INT; declare @v_actorCNUM CHAR(10); declare @v_sessID CHAR(32); declare @v_taskID SMALLINT; declare @v_dest_citrus

我想在循环中运行sp。 我正在使用db2。 对于ex,如果我的表中有10行,并且8行包含状态为“已批准”,我希望这8行通过我的sp逐个执行

我用过这个方法

declare @v_count INT;
declare @row_count INT;

declare @v_actorCNUM      CHAR(10); 
declare @v_sessID      CHAR(32);
declare @v_taskID      SMALLINT;
declare @v_dest_citrusSCID   INTEGER;  
declare @v_src_citrusSCID  INTEGER;
declare @v_CtrCnum         CHAR(10);
declare @v_dest_security_grp_nm  varchar(100);  
declare @v_src_security_grp_nm  varchar(100);

SET @v_count=1;
 DECLARE GLOBAL TEMPORARY TABLE csc_trfr
(   
  Row_id INT GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
 CNTRCTR_CNUM CHAR(10) NOT NULL ,
              DEST_CSC_NM CHAR(30) ,
              SRC_CSC_NM CHAR(30) ,
              DEST_GRP_NM VARCHAR(100) ,
              SRC_GRP_NM VARCHAR(100) ,
              USR_LST_UPDT_ID CHAR(10) 
  ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT lOGGED;
 insert into       session.csc_trfr                                                 (cntrctr_cnum,dest_csc_nm,src_csc_nm,dest_grp_nm,src_grp_nm,usr_lst_updt_id)
  select    cntrctr_cnum,dest_csc_nm,source_csc_nm,dest_grp_nm,src_grp_nm,usr_lst_updt_id from citrus.cntrctr_csc_trfr where trfr_status='Approved';

    select count(*) into @row_count from citrus.cntrctr_csc_trfr where  trfr_status='Approved';

while @v_count<=@row_count

  BEGIN


 SET @v_actorCNUM=select usr_lst_updt_id from session.csc_trfr order by    row_id offset @v_count rows fetch next 1 rows only;
 SET @v_taskID=166;
  set @v_dest_citrusSCID =select citrus_suprt_id from citrus.citrus_suprt_cntr where citrus_suprt_nm=(select DEST_CSC_NM from session.csc_trfr order by row_id offset @v_count rows fetch next 1 rows only );
set @v_src_citrusSCID=select citrus_suprt_id from citrus.citrus_suprt_cntr where citrus_suprt_nm=(select SRC_CSC_NM from session.csc_trfr order by row_id offset @v_count rows fetch next 1 rows only );
 set @v_CtrCnum=select cntrctr_cnum from session.csc_trfr order by row_id offset @v_count rows fetch next 1 rows only;
 set @v_dest_security_grp_nm =select  DEST_GRP_NM from session.csc_trfr order by row_id offset @v_count rows fetch next 1 rows only;
set @v_src_security_grp_nm=select  DEST_GRP_NM from session.csc_trfr order by row_id offset @v_count rows fetch next 1 rows only;
 call citrus.BAC020_cntrctrCSCTrfr(@v_actorCNUM,'',@v_taskID,@v_dest_citrusSCID,@v_src_citrusSCID,@v_CtrCnum,@v_dest_security_grp_nm,@v_src_security_grp_nm,?,?,?);
  @v_count=@v_count+1;
 end
声明@v_count INT;
声明@row\u count INT;
声明@v_actorCNUM CHAR(10);
声明@v_sessID CHAR(32);
声明@v_taskID SMALLINT;
声明@v_dest_citrusSCID整数;
声明@v_src_citrusSCID整数;
声明@v_CtrCnum CHAR(10);
声明@v_dest_security_grp_nm varchar(100);
声明@v_src_security_grp_nm varchar(100);
设置@v_count=1;
声明全局临时表csc\U trfr
(   
行id INT始终作为标识生成(以1乘以1的增量开始),
CNTRCTR_CNUM字符(10)不为空,
DEST_CSC_NM CHAR(30),
SRC_CSC_NM字符(30),
DEST_GRP_NM VARCHAR(100),
SRC_GRP_NM VARCHAR(100),
USR_LST_UPDT_ID字符(10)
)提交时替换保留未记录的行;
插入session.csc_trfr(cntrctr_cnum、dest_csc_nm、src_csc_nm、dest_grp_nm、src_grp_nm、usr_lst_updt_id)
从citrus.cntrctr\u csc\u trfr中选择cntrctr\u cnum、dest\u csc\u nm、source\u csc\u nm、dest\u grp\u nm、src\u grp\u nm、usr\u lst\u updt\u id,trfr\u status='Approved';
从citrus.cntrctr\u csc\u trfr中选择count(*)进入@row\u count,其中trfr\u status='Approved';
而@v_count我也有同样的问题
以下是一个例子:

use database1
去 声明@RC int 声明@RequestCode nvarchar(50) 声明的列\u游标 从表\u name中选择columnName 打开列光标 从列_游标获取下一个到@RequestCode 当@@Fetch\u Status=0开始时 执行@RC=[dbo].[stored_procedure_name]@RequestCode 从列_游标获取下一个到@RequestCode 终点 关闭列光标 取消分配列\u游标

我也有同样的问题 以下是一个例子:

use database1
去 声明@RC int 声明@RequestCode nvarchar(50) 声明的列\u游标 从表\u name中选择columnName 打开列光标 从列_游标获取下一个到@RequestCode 当@@Fetch\u Status=0开始时 执行@RC=[dbo].[stored_procedure_name]@RequestCode 从列_游标获取下一个到@RequestCode 终点 关闭列光标
取消分配列\u游标

您所说的“已执行”是什么意思?您是否可以在代码中添加一些关于您尝试执行的操作的注释?并尝试使用不带@符号的“v_actorCNUM”。Henrik我已经在下面添加了注释,说明我的代码到底在做什么。我已经删除了@符号,但它仍然会出错。您使用什么工具来创建SP?什么是语句终止符?语句的实际创建过程部分在哪里?工具是db2语句终止符->;你说的“处决”是什么意思?您是否可以在代码中添加一些关于您尝试执行的操作的注释?并尝试使用不带@符号的“v_actorCNUM”。Henrik我已经在下面添加了注释,说明我的代码到底在做什么。我已经删除了@符号,但它仍然会出错。您使用什么工具来创建SP?什么是语句终止符?语句的实际创建过程部分在哪里?工具是db2语句终止符->;