我在创建此存储过程时遇到问题,执行时遇到一些错误。错误包括忽略的SQL语句和未正确结束的SQL命令。我认为所有代码都非常干净。

  • 返回总记录,并将其插入到TABLE1表的RECORD_COUNT变量中。
  • 查看RECORD_COUNT是否大于零并转储数据以清除TABLE1表的条件。
  • 条件,以查看RECORD_COUNT是否等于零,以便从EXTERNAL_TABLE表插入TABLE1表。

  • 请协助。
        CREATE OR REPLACE PROCEDURE sp_INSERT
        (RECORD_COUNT OUT NUMBER)
        IS
        BEGIN
    
             SELECT COUNT(*)
                 INTO RECORD_COUNT
                 FROM TABLE1;
    
             IF RECORD_COUNT > 0 THEN
                 EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE1'
             END IF;
    
            IF RECORD_COUNT = 0 THEN
            INSERT INTO TABLE1
                (
                    JOB_ID,
                    NUM_SP1,
                    NUM_SP2,
                    NUM_SP3,
                    NUM_SP4,
                )
                (SELECT JOB_ID,
                    NUM_SP1,
                    NUM_SP2,
                    NUM_SP3,
                    NUM_SP4,
                FROM EXTERNAL_TABLE)
            COMMIT;
            END IF;
        END;
    

    最佳答案

    第一个:您在过程中的任何指令末尾都需要;
    第二个:TRUNCATEDDL命令,DDL命令在plsql中无效,您可以直接使用DELETE命令或使用EXECUTE IMMEDIATE Statement:
    第三次:有关insert-select statement的信息,请参见herehere

    CREATE OR REPLACE PROCEDURE sp_INSERT
        (RECORD_COUNT OUT NUMBER)
        IS
        BEGIN
             SELECT NVL(COUNT(*),0)
                 INTO RECORD_COUNT
                 FROM TABLE1;
    
             IF RECORD_COUNT > 0 THEN
                 EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE1';
             END IF;
             -- or
             IF RECORD_COUNT > 0 THEN
                 DELETE TABLE1;
             END IF;
    
    
            IF RECORD_COUNT = 0 THEN
            INSERT INTO TABLE1
                (
                    JOB_ID,
                    NUM_SP1,
                    NUM_SP2,
                    NUM_SP3,
                    NUM_SP4
                )
                SELECT JOB_ID,
                    NUM_SP1,
                    NUM_SP2,
                    NUM_SP3,
                    NUM_SP4
                FROM EXTERNAL_TABLE;
            COMMIT;
            END IF;
        END;
    
    /*
     VAR N NUMBER;
         EXCE SP_INSERT(:N);
            PRINT N;
    
    
                 N
             ----------
                 0
    
              INSERT INTO TABLE1 VALUES(1,1,1,1,1);
          INSERT INTO TABLE1 VALUES(1,1,1,1,1);
         INSERT INTO TABLE1 VALUES(1,1,1,1,1);
    
         COMMIT;
           VAR N NUMBER;
            EXCE SP_INSERT(:N);
            PRINT N;
    
                 N
              -------
                 3
    
          */
    

    关于stored-procedures - 使用IF和THEN在Oracle 11g pl/sql中创建存储过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19122048/

    10-14 15:22
    查看更多