Database 执行存储过程时,数据库表被锁定
无论何时调用下面的存储过程,我都会得到table in use exception 下面是存储过程的代码Database 执行存储过程时,数据库表被锁定,database,db2,database-administration,Database,Db2,Database Administration,无论何时调用下面的存储过程,我都会得到table in use exception 下面是存储过程的代码 CREATE PROCEDURE SP_BATCHFILE_REPORT_GET001 ( IN countryCode CHAR(2), IN reportFileID BIGINT ) RESULT SETS 1 LANGUAGE SQL SET OPTION COMMIT=*CS P1: BEGIN DECLARE cc CHAR(2); DECLARE fid
CREATE PROCEDURE SP_BATCHFILE_REPORT_GET001 (
IN countryCode CHAR(2),
IN reportFileID BIGINT
)
RESULT SETS 1
LANGUAGE SQL
SET OPTION COMMIT=*CS
P1: BEGIN
DECLARE cc CHAR(2);
DECLARE fid BIGINT;
-- Declare cursor
DECLARE cursor1 CURSOR FOR
SELECT * FROM CPS_FILE
WHERE COUNTRYCODE = cc
AND ReportFileID = fid
AND ReportGenerated = 'P'
AND Accepted <> '';
SET cc = countryCode;
SET fid = reportFileID;
UPDATE cps_file SET ReportGenerated = 'P'
WHERE COUNTRYCODE = cc
AND ReportFileID = fid
AND ReportGenerated <> 'Y'
AND Accepted <> '';
-- Cursor left open for client application
OPEN cursor1;
END P1 @
我使用DB2作为数据库,没有其他进程同时运行,这些进程可以访问存储过程中使用的表
我得到以下错误,
CPS数据类型*文件中的行或对象CPS_文件正在使用
请给出建议。我不是什么SP专家,但在创建光标时,您似乎锁定了CPS_文件表。随后的UPDATE语句因此失败。您好,我认为问题出在更新中,应该有一个使用cpd_文件的触发器,然后您的更新无法执行。请记住向我们提供SQL代码,以便更好地理解您的问题。等等,您想在这里实现什么?看起来您正试图获取update语句将更新的所有行的列表。;如果是这样的话,并且您的DB2版本支持它,那么您可能需要查看该部分。如果还没有设置cc和fid,您希望光标如何返回任何行?而且,以这种方式全局设置提交级别可能也不会有任何帮助。我要做的第一件事是将PARM的名称更改为cc和fid。然后我就把这两个声明和两个集合去掉了。那些只会混淆一切;除非COUNTRYCODE`和ReportFileID不是列名,否则SP在这种情况下没有明确意义。