2016-07-01 2 views
0

Когда я пытаюсь выполнить процедуру в самом Oracle, она отлично работает. Но когда я вызываю ту же процедуру из java, я получаю PLS-00201. Пожалуйста, дайте мне знать, если есть какая-либо ошибка.PLS-00201 при вызове выполнения PLSQL из java

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, где имя_схемы - это пользователь, которому это принадлежит. – 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 того же синтаксиса из java – Karthik

+0

Да, вы правы, вы можете использовать его с JDBC, я помню, что я использовал его так, но, как я знаю, вызывающие процедуры в SQLPLUS похожи на это, а не на int PLSQL , в PLSQL вам не нужно ключевое слово _call_. – jfun

0

Предоставьте разрешение на выполнение вашей процедуры на имя пользователя db, используемое в вашем приложении Java.

GRANT EXECUTE ON PR_REJECT_FILE TO DBUsername_used_in_your_Java_Application; 

e.g.

GRANT EXECUTE ON PR_REJECT_FILE TO APPDBUSERNAME; 
Смежные вопросы