Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 执行存储过程时,数据库表被锁定_Database_Db2_Database Administration - Fatal编程技术网

Database 执行存储过程时,数据库表被锁定

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

无论何时调用下面的存储过程,我都会得到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 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在这种情况下没有明确意义。