2015-04-01 66 views
1

我有以下步驟插入用戶的表:過程調用壞了 - 聲明忽略

CREATE OR REPLACE PROCEDURE ELR_ADD_USER 
        (I_NAME   IN VARCHAR2, 
        I_MORADA  IN VARCHAR2, 
        I_BIRTHDATE  IN DATE, 
        I_COUNTRY  IN VARCHAR2, 
        O_ID   OUT NUMBER, 
        O_ERROR_MSG  OUT VARCHAR2) 
IS 
ERROR_NULL   EXCEPTION; 
BEGIN 

IF I_NAME IS NULL OR 
    I_MORADA IS NULL OR 
    I_BIRTHDATE IS NULL OR 
    I_COUNTRY IS NULL THEN 

     RAISE ERROR_NULL; 
END IF; 

    O_ID := ELR_seq_USER_ID.nextval; 

IF O_ID IS NULL 
    RAISE ERROR_NULL; 
END IF; 

    INSERT INTO ELR_USERS 
    VALUES (O_ID, I_NOME, I_MORADA, I_BIRTHDATE, I_COUNTRY); 

EXCEPTION 
    WHEN ERROR_NULL THEN 
    O_ERROR_MSG := 'NULL FIELDS'; 
    WHEN OTHERS THEN 
    O_ERROR_MSG := 'UNEXPECTED ERROR: '|| sqlerrm; 

END; 
/

我覺得過程和它的語法是正確的。然而,當我試圖與調用它:

DECLARE 
    P_NAME   VARCHAR2(50); 
    P_MORADA  VARCHAR2(50); 
    P_BIRTHDATE DATE; 
    P_COUNTRY  VARCHAR2(20); 
    P_ID   NUMBER(20); 
    P_ERROR_MSG VARCHAR2(4000); 
BEGIN 

ELR_ADD_USER('ED WARNER','CENAS Street',SYSDATE, 
         'China', P_ID, P_ERROR_MSG); 

IF P_ERROR_MSG IS NOT NULL THEN 
    DBMS_OUTPUT.PUT_LINE('ERROR: '||P_ERROR_MSG); 
END IF; 

END; 
/

我得到以下信息:

enter image description here

是不是有什麼毛病調用或程序本身?

+0

然後將它與錯誤編譯。重新編譯並運行「顯示錯誤」 – OldProgrammer 2015-04-01 11:57:14

回答

0

ORA-06550其次PLS-00905顯然是編譯錯誤。程序在INVALID狀態。

重新編譯該程序,並使用SHOW ERRORS獲取完整的錯誤詳細信息。

SHOW ERROR PROCEDURE RMS_MM.ELR_ADD_USER或者乾脆SHOW ERRORS

對於example

SQL> CREATE OR REPLACE PROCEDURE TestProc 
    2 AS 
    3 vnum number; 
    4 BEGIN 
    5 vnum := vAnotherNum; 
    6 END; 
    7/

Warning: Procedure created with compilation errors. 

SQL> execute TestProc(); 
BEGIN TestProc(); END; 

* 
ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00905: object EXAMPLE.TESTPROC is invalid 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

SQL> show error procedure TestProc; 
Errors for PROCEDURE TESTPROC: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
5/1 PL/SQL: Statement ignored 
5/9 PLS-00201: identifier 'VANOTHERNUM' must be declared 
+0

顯示錯誤過程ELR_ADD_USER;或顯示錯誤程序ELR_ADD_USER;兩者都是無效的陳述:x – SaintLike 2015-04-01 12:11:14

+1

'SHOW ERROR PROCEDURE RMS_MM.ELR_ADD_USER'或乾脆'SHOW ERRORS' – 2015-04-01 12:20:43