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';