Я потратил несколько месяцев на разработку приложения JAVA с серверной частью Oracle db. Я использую Netbeans в качестве IDE и Oracle 12c на ноутбуке в качестве базы данных. Весь PL / SQL был скомпилирован без ошибок.
После обширного тестирования (вошел в систему как владелец схемы) я попытался добавить пользователя. Я создал пользователя, вошел в систему как SYS_DBA, используя CREATE USER E566299 IDENTIFIED BY tempPswrd
, затем предоставил разрешение, используя GRANT CREATE SESSION
и GRANT EXECUTE ON C##FAI_CODE.FAI_ADMIN_PKG TO E566299
, и получил Grant succeeded
подтверждение.
Я вхожу в свое приложение как новый пользователь без ошибок, используя следующее:
private static Connection getDbConn(String user, String password) throws SQLException{
OracleDataSource ods = null;
Connection dbConn = null;
user = "c##" + user;
ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@//localhost:1522/orcl.global.ds.XXXXXXXX.com");
ods.setUser(user);
ods.setPassword(password);
dbConn = ods.getConnection();
return dbConn;
}
Затем он выдает ошибку при первом вызове процедуры пакета:
java.sql.SQLException: ORA-06550: строка 1, столбец 13: PLS-00201: идентификатор FAI_ADMIN_PKG.CHECK_USER_FOLLOWED должен быть объявлен ORA-06550: строка 1, столбец 7: PL / SQL: инструкция игнорируется
в oracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java:450) в oracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java:399) в oracle.jdbc.driver.T4C8ror10all.process ) на oracle.jdbc.driver.T4CTTIfun.receive (T4CTTIfun.java:655) на oracle.jdbc.driver.T4CTTIfun.doRPC (T4CTTIfun.java:249) на oracle.jdbc.driver.T4C8Oall.doOall (T4C8Oall.doOALL. 566) на oracle.jdbc.driver.T4CCallableStatement.doOall8 (T4CCallableStatement.java:210) в oracle.jdbc.driver.T4CCallableStatement.doOall8 (T4CCallableStatement.java:53) в oracle.jdbc.driver.CCallableStatement.java:53) в oracle.jdbc..exe : 938) на oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout (OracleStatement.java:1075) на oracle.jdbc.driver.OraclePreparedStatement.executeInternal (OraclePreparedStatement.java:3820) в oracle.jdbc.driver. Java: 392 3) на oracle.jdbc.driver.OracleCallableStatement.execute (OracleCallableStatement.java:5617) на oracle.jdbc.driver.OraclePreparedStatementWrapper.execute (OraclePreparedStatementWrapper.java:1385) на faidcheck5dubscription (FAIdcheck5.FAIdb) faidb.faidbUI.run (faidbUI.java:186) в faidb.faidbLogin $ 3.run (faidbLogin.java:133) в java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:311)
Я в растерянности, я пробовал все возможные комбинации формулировок гранта, все заглавные буквы, все строчные буквы, одинарные кавычки, двойные кавычки, с префиксом имени владельца схемы C##FAI_CODE.FAI_ADMIN_PKG
, без FAI_ADMIN_PKG
, ничто не позволит этому новому пользователю выполнить упаковка.
Я потратил много времени на этот проект и близок к панике из-за того, что никто не сможет его использовать.
Вопрос:
Почему мой недавно созданный пользователь не может выполнить пакет после получения разрешения?
Редактировать:
Я получаю NullPointerException
в последней строке с вызовом rset.close();
, набор результатов никогда не инициализируется, но не выдает SQLException
public Vector<String> fillBox() throws SQLException, NullPointerException{
CallableStatement callStatement = null;
ResultSet rset = null;
String fillBox = "{call fai_admin_pkg.get_end_item_pn(?)}";
Vector<String> boxFill = new Vector<>();
try{
callStatement = conn.prepareCall(fillBox);
callStatement.registerOutParameter(1, OracleTypes.CURSOR);
callStatement.execute();
rset = (ResultSet) callStatement.getObject(1);
boxFill = buildRsVector(rset);
}
finally{
callStatement.close();
rset.close();
}
return boxFill;
}
Это называется здесь:
Vector<String> boxFill = new Vector<>();
try{
boxFill = uiInst.fillBox();
}catch(SQLException e){
JOptionPane.showMessageDialog(frame, e.getMessage());
}catch(NullPointerException e){
JOptionPane.showMessageDialog(frame, e.getMessage());
e.printStackTrace();
}
Вот мои разрешения как нового пользователя ... которые не включают выполнение в пакете ?? Я не понимаю
dba_source
для конкретныхobject_name
,owner
иprocedure_name
может помочь показать, как на самом деле создаются идентификаторы. - person Justin Cave   schedule 15.05.2015current_schema
для сеанса для владельца пакета или если у вас был локальный или глобальный синоним для пакета. У вас есть какие-нибудь из этих вещей? Если нет, вам понадобится включить префикс схемы. Если вы внесете это изменение, оно, вероятно, как минимум исправит сообщение об ошибке. Затем опубликуйтеdba_procedure
информацию (извините, неdba_source
, с моей стороны мозги пердят). - person Justin Cave   schedule 15.05.2015