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

Oracle 执行错误时plsql过程无效标识符00904,oracle,plsql,Oracle,Plsql,我正在写一个简单的程序试图执行,但它显示了object_id:invalid identifier我如何解决这个问题 参数列表/插入中的一个列名可能错误。试着用varchar2来处理所有的问题,看看这是否有帮助 create or replace PROCEDURE ADD_DEPT2 (P_DEPTNO IN VARCHAR2, P_DNAME IN VARCHAR2,

我正在写一个简单的程序试图执行,但它显示了object_id:invalid identifier我如何解决这个问题

参数列表/插入中的一个列名可能错误。试着用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; 
“将出现与显示相同的错误”

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

这是您的桌子:

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\u部门无效”

在SQL*Plus中:

  • 以斯科特的身份联系
  • 修改程序,增加部门编制
  • 显示错误

  • 或者对您用来编写代码的IDE应用等效序列。

    有人能告诉我如何解决此问题吗Tony andrews先生您能告诉我此过程的解决方案吗srsrinath378@gmail.comYour已发布的过程没有任何参考
    对象\u ID
    。显然,这不是产生错误的原因。如果您的DEPT1表与的投影匹配,那么您的代码应该编译。可能是其中一个列名出错实际上删除%类型在我看来是走错了方向。有了%TYPE,如果这些列不是表中的有效列,代码甚至不会编译。您是否遇到编译时或运行时错误?它是静态SQL,所以应该是编译时。您能告诉我们具体的错误信息吗?PLS-00905:object SCOTT.ADD\u DEPARTMENT is invalidSQL>select*from DEPARTMENT;DNAME DLOC-----------------------------------101 SRINATH HINDUPUR 102 SAINATH ANANTAPURi可以从现在开始在上面发布屏幕截图我必须写一个链接名作为完整的过程执行,以查看并说明问题所在Sir如果这个答案有助于您进行投票和/或接受它。接受的答案可以提高StackOverflow作为未来搜索者的资源。
    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>