从java调用执行PLSQL时的PLS-00201

时间:2016-07-01 12:50:22

标签: java oracle stored-procedures

当我尝试在Oracle本身执行该过程时,它可以正常工作。但是当我从java调用相同的程序时,我得到的是PLS-00201。如果有任何错误,请告诉我。

java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'PR_REJECT_FILE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)

这是我的程序电话:

CallableStatement cs=null;

    try
    {
        cs = this.dteConn.prepareCall("{ call PR_REJECT_FILE (?,?,?) }");
        cs.setString(1,status);
        cs.setInt(2, fileid);
        cs.setString(3,t_id);
        cs.execute();

    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

什么是PR_REJECT_FILE?我的意思是它是一个函数还是一个程序? call命令不适用于PL / SQL,无法在sql * plus中使用。 我的意思是你不能像在PLSQL中的代码那样调用一个过程或函数,它取决于PR_REJECT_FILE的输出以及拥有它的用户或模式。

如果是程序,你可以这样称呼它:

begin
PR_REJECT_FILE (?,?,?);
end;

如果它是一个返回标量值的函数,你可以像下面这样调用它:

select PR_REJECT_FILE (?,?,?) from dual;

如果PR_REJECT_FILE适用于其他用户且您有权执行该用户,那么您必须将该用户的前缀带入上述代码(user.PR_REJECT_FILE)。

我更喜欢使用JDBC来搜索包,过程或函数。

答案 1 :(得分:0)

将您的过程的执行权限授予Java应用程序中使用的db用户名。

GRANT EXECUTE ON PR_REJECT_FILE TO DBUsername_used_in_your_Java_Application;

e.g。

GRANT EXECUTE ON PR_REJECT_FILE TO APPDBUSERNAME;