执行错误时的plsql过程无效标识符00904

时间:2017-08-17 13:40:39

标签: oracle plsql

Error message

CREATE TABLE DEPARTMENT(DID INT,DNAME VARCHAR2(20),DLOC VARCHAR2(20));


INSERT INTO DEPARTMENT VALUES(101,'SRINATH','HINDUPUR');
INSERT INTO DEPARTMENT VALUES(102,'SAINATH','ANANTAPUR');

create or replace PROCEDURE ADD_DEPARTMENT
             (P_DID IN DEPARTMENT.DID%TYPE,
                    P_DNAME IN DEPARTMENT.DNAME%TYPE,
                    P_DLOC IN DEPARTMENT.DLOC%TYPE,
                    P_ERROR_MSG OUT VARCHAR2)
IS
BEGIN
    INSERT INTO DEPARTMENT(DID,DNAME,DLOC)VALUES(P_DID,P_DNAME,P_DLOC);
    COMMIT;
EXCEPTION 
    WHEN OTHERS THEN
        P_ERROR_MSG:=SQLERRM;
END ADD_DEPARTMENT;
我写了一个简单的程序尝试执行,但它显示了object_id:无效的标识符我怎么能解决 complete procedure execution image

2 个答案:

答案 0 :(得分:0)

参数列表/插入中的一个列名可能有误。尝试将varchar2用于所有这些,看看是否有帮助

  create or replace PROCEDURE ADD_DEPT2
                         (P_DEPTNO IN VARCHAR2,
                          P_DNAME IN VARCHAR2,
                          P_LOC IN VARCHAR2,
                          P_ERROR_MSG OUT VARCHAR2)
  IS
  BEGIN
  INSERT INTO DEPT1(DEPTNO,DNAME,LOC)VALUES(P_DEPTNO,P_DNAME,P_LOC);
  COMMIT;
  EXCEPTION
  WHEN OTHERS THEN
  P_ERROR_MSG :=SQLERRM;
  END ADD_DEPT2; 

答案 1 :(得分:0)

  

"它可以显示相同的错误"

不,不,它没有赢。让我们通过运行您发布的代码来证明这一点。

这是你的表:

SQL> CREATE TABLE DEPARTMENT(DID INT,DNAME VARCHAR2(20),DLOC VARCHAR2(20));

Table created.

SQL> INSERT INTO DEPARTMENT VALUES(101,'SRINATH','HINDUPUR'); 

1 row created.

SQL> INSERT INTO DEPARTMENT VALUES(102,'SAINATH','ANANTAPUR');

1 row created.

SQL> 

以下是您的程序:

SQL> create or replace PROCEDURE ADD_DEPARTMENT
  2                      (P_DID IN DEPARTMENT.DID%TYPE,
  3                                     P_DNAME IN DEPARTMENT.DNAME%TYPE,
  4                                     P_DLOC IN DEPARTMENT.DLOC%TYPE,
  5                                     P_ERROR_MSG OUT VARCHAR2)
  6  IS
  7  BEGIN
  8     INSERT INTO DEPARTMENT(DID,DNAME,DLOC)VALUES(P_DID,P_DNAME,P_DLOC);
  9     COMMIT;
 10  EXCEPTION
 11     WHEN OTHERS THEN
 12     P_ERROR_MSG:=SQLERRM;
 13  END ADD_DEPARTMENT;
 14  /

Procedure created.

SQL> 

而且!它不仅可以编译,而且运行时也没有错误。

SQL> set serveroutput on
SQL> declare                  
  2      v varchar2(128);
  3  begin
  4      add_department(666, 'Area 51', 'Roswell',  v);
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> select * from department;

       DID DNAME                DLOC
---------- -------------------- --------------------
       101 SRINATH              HINDUPUR
       102 SAINATH              ANANTAPUR
       666 Area 51              Roswell

SQL>

所以我再一次问,问题是什么?

  

" PLS-00905:对象SCOTT.ADD_DEPARTMENT无效"

在SQL * Plus中:

  1. 以SCOTT身份连接
  2. alter procedure add_department compile;
  3. 显示错误
  4. 或者对用于编写代码的IDE应用等效序列。