2016-07-01 4 views
0

Oracle自体でプロシージャを実行しようとしているときに正常に動作します。しかし、私はjavaから同じプロシージャを呼び出すとき、私はPLS-00201を得ています。間違いがある場合は、親切に教えてください。ここでPLS-00201をJavaから実行するとPLSQLが呼び出される

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

ユーザーがそのデータベースに対するアクセス許可を持っているかどうかを確認してください。 – Balakumar

+2

まず、この手順を所有しているかどうかを確認してください。ユーザーがプロシージャーの実行を許可していないかどうかを確認します。そして、プロシージャーにパブリック・シノニムがあるかどうかを確認します。それ以外の場合は、SCHEMA_NAME.PR_REJECT_FILEとします。ここで、schema_nameは所有者です。 – Mottor

答えて

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でパッケージ、プロシージャ、または関数を使用して検索することをお勧めします。

+0

申し訳ありませんが、それはプロシージャです。 Javaから、呼び出しはその構文になります。私は同じ構文の他のproceudre呼び出しを持っています – Karthik

+0

そう、あなたはそれをJDBCで使うことができます。私はそれを好きに使ったことを覚えていますが、SQLPLUSの呼び出しプロシージャはint型ではなくPLSQL PLSQLでは、キーワードを_call_する必要はありません。 – jfun

0

Javaアプリケーションで使用されているdbユーザー名にプロシージャの実行権限を付与します。

GRANT EXECUTE ON PR_REJECT_FILE TO DBUsername_used_in_your_Java_Application; 

GRANT EXECUTE ON PR_REJECT_FILE TO APPDBUSERNAME; 
関連する問題