2010-10-08 5 views
0

Nous avons un programme Java qui se connecte via un client léger JDBC à une base de données Oracle 10g.Chaîne de connexion JDBC et synonymes Oracle

Tout fonctionnait bien, mais maintenant le DBA veut que nous nous connections avec un nom d'utilisateur/mot de passe différent, qui est censé avoir accès aux mêmes tables en utilisant des synonymes publics. Malheureusement, le programme Java ne voit plus les tables (voir erreur ci-dessous lorsque j'essaie de faire "select * from nomtable").

J'ai essayé de me connecter en utilisant le même nom d'utilisateur/mot de passe avec Oracle SQL Developer et dans ce cas, je peux exécuter "select * from tableName" sans problèmes.

Y a-t-il un paramètre spécifique que je dois mettre dans la chaîne de connexion?

Merci beaucoup!

Exception in thread "main" java.sql.SQLException: ORA-00942: table or view does not exist 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) 
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743) 
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207) 
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790) 
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1037) 
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830) 
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132) 
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687) 
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653) 

Edited by: user555817 on 08-Oct-2010 04:55 
+0

pouvez-vous envoyer du code et de la config ainsi –

+2

Pouvez-vous exécuter la requête exacte avec succès dans SQL Developer, ou avez-vous testé une seule table? Si la requête a des jointures, ou une sous-requête, etc., il peut manquer un synonyme ou ne pas avoir de privilèges sélectionnés pour l'une des tables. Poster le SQL aiderait. –

Répondre

-2

Vous avez à ajouter Nom du schéma ainsi que le nom de la table et faire en lettres majuscules (je ne me rappelle pas si c'est sensible à la casse ou tout simplement en majuscules).

Exemple: S'il y a une table des employés dans SCH1 et le synonyme est créé en SCH2 comme Emp pour SCH2.Employee, la déclaration ci-dessous est valide,

SELECT * FROM SCH2.emp 

Où, emp: Nom Synonyme SCH2: nom de schéma où ce synonyme est créé, pas le nom de schéma de la table réelle.

+1

Il a dit que c'était un synonyme public, donc aucun nom de schéma nécessaire – Matt

Questions connexes