【问题标题】:PL/SQL: Identifier must be declaredPL/SQL:必须声明标识符
【发布时间】:2023-04-02 08:25:01
【问题描述】:

我是 PL/SQL 的初学者,所以这个问题难倒我。我有一些 PL/SQL 代码:

create or replace package p2 as
  procedure show_students(ref_cursor out sys_refcursor);
  ... 
end;
/
show errors

create or replace package body p2 as
procedure show_students(ref_cursor out sys_refcursor) is
begin
    open ref_cursor for SELECT * FROM students;
end;
...
end;
/
show errors

我也有这个 Java 代码:

public static void showTable( int option, Connection conn ) {
    try {
        CallableStatement cs = conn.prepareCall( "begin p2.show_students(?); end;" ) ;
        cs.registerOutParameter( 1, OracleTypes.CURSOR ) ;
        cs.execute() ;
        ResultSet rs = (ResultSet)cs.getObject( 1 ) ;
        while ( rs.next()) {
          System.out.println( rs.getString(1) + "\t" +
                              rs.getString(2) + "\t" + rs.getString(3) + 
                              rs.getString(4) + 
                              "\t" + rs.getDouble(5) + "\t" +
                              rs.getString(6)) ;
        }
        cs.close() ;
      }
      catch( SQLException ex ) {
        System.out.println( "SQL Exception " + ex.getMessage()) ;
      }

当我运行 Java 程序时,我收到以下错误:

SQL Exception ORA-06550: line 1, column 7:
PLS-00201: identifier 'P2.SHOW_STUDENTS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

...我不知道是什么导致了这个问题。非常感谢任何帮助!

【问题讨论】:

    标签: java sql plsql


    【解决方案1】:

    我没有所有答案,但该错误通常是由于权限问题而发生的。即您的代码没有运行 SQL 过程的权限。

    你应该尝试做一些 GRANT 语句

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    你必须像这样调用这个过程:

    CallableStatement cs = conn.prepareCall("{call show_students (?)}");
    

    不能有其他名称为 p2 的过程。不用提了

    【讨论】:

    • 即使使用此代码我也会遇到同样的问题:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多