Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
Db2存储过程错误(在使用它的上下文中无效)_Db2_Db2 Luw - Fatal编程技术网

Db2存储过程错误(在使用它的上下文中无效)

Db2存储过程错误(在使用它的上下文中无效),db2,db2-luw,Db2,Db2 Luw,我的问题是,当我调用存储过程时,它不工作 drop procedure DELETE_WITH_COMMIT_COUNT1 DB20000I The SQL command completed successfully. CREATE PROCEDURE DELETE_WITH_COMMIT_COUNT1(IN v_TABLE_NAME VARCHAR(24), IN v_COMMIT_COUNT INTEGER ) NOT DETERMINISTIC LANGUAGE SQ

我的问题是,当我调用存储过程时,它不工作

drop procedure DELETE_WITH_COMMIT_COUNT1
DB20000I  The SQL command completed successfully.

CREATE PROCEDURE DELETE_WITH_COMMIT_COUNT1(IN v_TABLE_NAME VARCHAR(24), IN v_COMMIT_COUNT INTEGER )
    NOT DETERMINISTIC
    LANGUAGE SQL
P1 : BEGIN

    -- DECLARE Statements
    DECLARE SQLCODE INTEGER;
    DECLARE v_DELETE_QUERY VARCHAR(1024);
    DECLARE v_DELETE_STATEMENT STATEMENT;

P2 : BEGIN
    DECLARE V1 CHAR(24) FOR BIT DATA;
    DECLARE V2 CHAR(24) FOR BIT DATA ;

DECLARE cur1 CURSOR WITH RETURN TO CLIENT FOR select min(MESSAGE_ID),max(MESSAGE_ID) from TESTING where TIMESTAMP between (select TIMESTAMP(date(min(timestamp))) from TESTING with ur) and (select TIMESTAMP(date(min(timestamp))) + 1 day from TESTING with ur) ;

OPEN cur1;
FETCH FROM cur1 INTO V1, V2;

   SET v_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_TABLE_NAME || ' WHERE MESSAGE_ID between V1 and V2 '
        || ' FETCH FIRST ' || RTRIM(CHAR(v_COMMIT_COUNT)) || ' ROWS ONLY) AS DELETE_TABLE';

    PREPARE v_DELETE_STATEMENT FROM v_DELETE_QUERY;

    DEL_LOOP:
        LOOP
            EXECUTE v_DELETE_STATEMENT;
            IF SQLCODE = 100 THEN
                LEAVE DEL_LOOP;
            END IF;
            COMMIT;
        END LOOP;

    COMMIT;
  END P2;
END P1
DB20000I  The SQL command completed successfully.
我的过程已成功创建,但调用它时出现以下问题:

db2调用DELETE_和_COMMIT_COUNT1“TESTING”,50 SQL0206N V1为 在使用它的上下文中无效。SQLSTATE=42703

更多信息:

db2从测试中选择minMESSAGE\u ID和maxMESSAGE\u ID 从测试中选择TIMESTAMPdatemintimestamp之间的时间戳 使用ur并从中选择TIMESTAMPdatemintimestamp+1天 使用ur进行测试

我想删除这些值之间的记录,目前我有99条最小和最大消息id之间的记录

message_id column is defined as CHAR(24) FOR BIT DATA on the table .

你的问题在于这句话:

SET v_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_TABLE_NAME || ' WHERE   MESSAGE_ID between V1 and V2 '
        || ' FETCH FIRST ' || RTRIM(CHAR(v_COMMIT_COUNT)) || ' ROWS ONLY) AS DELETE_TABLE';
在该语句中,您似乎希望使用先前声明的变量V1和V2的值:

' WHERE   MESSAGE_ID between V1 and V2 '
DB2将其视为字符串文本。相反,请尝试更改语句的这一部分,如下所示:

SET v_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_TABLE_NAME || ' WHERE   MESSAGE_ID between ' || V1 || ' and ' || V2
            || ' FETCH FIRST ' || RTRIM(CHAR(v_COMMIT_COUNT)) || ' ROWS ONLY) AS DELETE_TABLE';

您的问题在这里:“| |”消息_ID在V1和V2之间的位置”`
SET v_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_TABLE_NAME || ' WHERE   MESSAGE_ID between ' || V1 || ' and ' || V2
            || ' FETCH FIRST ' || RTRIM(CHAR(v_COMMIT_COUNT)) || ' ROWS ONLY) AS DELETE_TABLE';