2013-10-02 3 views
0

То, что я пытаюсь сделать здесь, не запускает код вставки снова и снова, поэтому я решил создать хранимую процедуру. Ниже приведен скрипт для хранимой процедуры и он успешно создан, но когда я выполняю хранимую процедуру «BEGIN SP_INSERT_PMC_UPDATE_DP; END;» Я получаю сообщение об ошибке «* неправильное число или типы аргументов в вызове SP_INSERT_PMC_UPDATE_DP *»PL/SQL на Oracle 11g код при выполнении хранимой процедуры

Моя рамка мышления и код зр на это:

1- я проверить, если есть записи в PMC_UPDATE_DP и поместите это значение в RECORD_COUNT.

2- Теперь, если RECORD_COUNT больше нуля, я хочу удалить все записи из таблицы PMC_UPDATE_DP.

3- Если RECORD_COUNT равно нулю, то я хочу вставить данные из таблицы 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; 

ответ

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 в качестве локальной переменной.

Смежные вопросы