当我尝试在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();
}
答案 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;