Stored procedures SQL错误:DB2SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=AS;仅前100行);),驾驶员=3.57.82

Stored procedures SQL错误:DB2SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=AS;仅前100行);),驾驶员=3.57.82,stored-procedures,db2,prepared-statement,Stored Procedures,Db2,Prepared Statement,下面的DB2存储过程已成功编译,但获取运行时错误SQL错误:DB2SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=AS;仅前100行;,驾驶员=3.57.82 下面db2过程的目的是使用准备好的语句从多个表中删除记录 CREATE PROCEDURE ALL_DATA_PURGE1(IN v_SCHEMA_NAME VARCHAR(24),IN v_DAYS INTEGER, IN v_COMMIT_COUNT INTEGER) NOT DETERM

下面的DB2存储过程已成功编译,但获取运行时错误SQL错误:DB2SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=AS;仅前100行;,驾驶员=3.57.82

下面db2过程的目的是使用准备好的语句从多个表中删除记录

CREATE PROCEDURE ALL_DATA_PURGE1(IN v_SCHEMA_NAME VARCHAR(24),IN v_DAYS INTEGER, IN v_COMMIT_COUNT INTEGER)
    NOT DETERMINISTIC
    LANGUAGE SQL
BEGIN

    -- DECLARE Statements
    DECLARE SQLCODE INTEGER;

    DECLARE v_CRAD_DELETE_QUERY    VARCHAR(1024);
    DECLARE v_APPDATA_DELETE_QUERY VARCHAR(1024);

    DECLARE v_CRAD_DELETE_STATEMENT STATEMENT;
    DECLARE v_APPDATA_DELETE_STATEMENT STATEMENT;

    SET v_CRAD_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_SCHEMA_NAME || '.CRAD WHERE UNIQUE_ID IN  
    (SELECT UNIQUE_ID FROM  ' || v_SCHEMA_NAME || '.APPDATA WHERE ORIGINATOR_TIMESTAMP < (
      SELECT CURRENT TIMESTAMP - '|| v_DAYS ||' DAYS FROM SYSIBM.SYSDUMMY1)
      ) FETCH FIRST ' || v_COMMIT_COUNT || ' ROWS ONLY) AS DELETE_CRAD_TABLE';      

    SET v_APPDATA_DELETE_QUERY = 'DELETE FROM (SELECT 1 FROM ' || v_SCHEMA_NAME || '.APPDATA WHERE SOME_TIMESTAMP < (
      SELECT CURRENT TIMESTAMP - ' || v_DAYS || ' days FROM sysibm.sysdummy1
      ) FETCH FIRST ' || v_COMMIT_COUNT || ' ROWS ONLY) AS DELETE_APPDATA_TABLE';


    PREPARE v_CRAD_DELETE_STATEMENT    FROM v_CRAD_DELETE_QUERY;  
    PREPARE v_APPDATA_DELETE_STATEMENT FROM v_APPDATA_DELETE_QUERY;

    DELETE_LOOP:
        LOOP
            EXECUTE v_CRAD_DELETE_STATEMENT;
            EXECUTE v_APPDATA_DELETE_STATEMENT;

            IF SQLCODE = 100 THEN
                LEAVE DELETE_LOOP; 
            END IF;
            COMMIT;
        END LOOP;

   COMMIT;

END

由于动态SQL语句未知,因此存储过程将进行编译。在运行时,DB2注意到您没有遵循它的语法规则。这些陈述看起来过于复杂,可以简化。您不需要从sysdummy1中进行选择-一些简单的表达式就可以了


在编写存储过程之前,您是否测试了各个语句?

请编辑问题,以便存储过程完全显示为代码谢谢您的回答。我做了单独的测试,它的工作。请建议我如何简化这些复杂的查询。所有语法错误都已解决,我现在需要简化。示例:摆脱select。。。从sysdummy1中,它是一个简单的当前时间戳-v_Days DAYSThanks,完成并工作。哪种方法最适合从表中删除大量数据,可以是通过cursormy other question(我发布的另一个问题),也可以是上面的语句。对于删除基于日期/时间属性的大块数据,表通常是范围分区的。在这种情况下,只有符合条件的分区被分离。你调查过了吗?您申请的天数范围是多少?