0

我在这里要做的不是一遍又一遍地运行插入代码,这就是我决定创建存储过程的原因。下面是存储过程的脚本,它创建成功,但是当我执行存储过程“BEGIN SP_INSERT_PMC_UPDATE_DP; END;” 我收到一条错误消息“*在调用 SP_INSERT_PMC_UPDATE_DP* 时参数的数量或类型错误”

我对此的思考框架和sp代码是:

1- 我检查 PMC_UPDATE_DP 中是否有记录,并将该值放入 RECORD_COUNT。

2- 现在,如果 RECORD_COUNT 大于零,我想清除 PMC_UPDATE_DP 表中的所有记录。

3- 如果 RECORD_COUNT 等于 0,那么我想将 EXTERNAL_PMC_UPDATE_FD 表中的数据插入 PMC_UPDATE_DP。

    CREATE OR REPLACE PROCEDURE PMC.SP_INSERT_PMC_UPDATE_DP 
    (RECORD_COUNT OUT NUMBER) --Is my issue here???
    IS

    BEGIN   
--Returns the total records and adds the value to RECORD_COUNT variable.
        SELECT COUNT(*) 
            INTO RECORD_COUNT
            FROM PMC.PMC_UPDATE_DP; 

--Condition to see if RECORD_COUNT is greater than zero and dumps data to clear out PMC.PMC_UPDATE_DP table.
        IF RECORD_COUNT > 0 THEN 
            EXECUTE IMMEDIATE 'TRUNCATE TABLE PMC.PMC_UPDATE_DP';
        END IF; 

--Condition to see if RECORD_COUNT equals zero. If true insert data into PMC_UPDATE_DP table from the PMC.EXTERNAL_PMC_UPDATE_FD table.
        IF RECORD_COUNT = 0 THEN 
            INSERT INTO PMC.PMC_UPDATE_DP
            (       JOB_ID,               
            CONTROL_ID,           
            ACCT_NO,              
            CALC_DIVIDEND,        
            CERT_NEW_SHARES,      
            CALC_CASH_DISBURSMENT,
            DECEASED,             
            STATUS,               
            ALPHA_SP1,            
            ALPHA_SP2,            
            ALPHA_SP3,            
            ALPHA_SP4,            
            NUM_SP1,              
            NUM_SP2,              
            NUM_SP3,              
            NUM_SP4,              
            DONT_CALL,            
            DONT_MAIL            
            )
            SELECT JOB_ID,               
            CONTROL_ID,           
            ACCT_NO,              
            CALC_DIVIDEND,        
            CERT_NEW_SHARES,      
            CALC_CASH_DISBURSMENT,
            DECEASED,             
            STATUS,               
            ALPHA_SP1,            
            ALPHA_SP2,            
            ALPHA_SP3,            
            ALPHA_SP4,            
            NUM_SP1,              
            NUM_SP2,              
            NUM_SP3,              
            NUM_SP4,              
            DONT_CALL,            
            DONT_MAIL
            FROM PMC.EXTERNAL_PMC_UPDATE_FD
            COMMIT;
        END IF;
    END;
4

1 回答 1

1

如果你想调用一个带OUT参数的过程,你需要传入一个局部变量,这样 Oracle 就有一些东西来保存输出。

DECLARE 
  l_record_count pls_integer;
BEGIN
  PMC.SP_INSERT_PMC_UPDATE_DP ( l_record_count );

  -- Do something with l_record_count, probably not just calling dbms_output
  -- dbms_output.put_line( 'Record count = ' || l_record_count );
END;

如果你不打算对输出做任何事情,也许你真的不希望过程有一个OUT参数。也许您只想声明record_count为局部变量。

于 2013-10-02T00:37:32.223 回答