【问题标题】:JDBC connect string and Oracle synonymsJDBC 连接字符串和 Oracle 同义词
【发布时间】:2011-04-22 22:26:25
【问题描述】:

我们有一个通过 JDBC 瘦客户端连接到 Oracle 10g 数据库的 Java 程序。

一切正常,但现在 DBA 希望我们使用不同的用户名/密码进行连接,该用户名/密码应该可以使用公共同义词访问相同的表。 不幸的是,Java 程序不再看到这些表(当我尝试执行“从表名中选择 *”时,请参阅下面的错误)。

我尝试使用相同的用户名/密码与 Oracle SQL Developer 连接,在这种情况下,我可以毫无问题地运行“select * from tablename”。

我需要在连接字符串中放入特定的参数吗?

非常感谢!

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

【问题讨论】:

  • 你也可以发布代码和配置
  • 能否在 SQL Developer 中成功运行精确查询,或者您只是测试了一张表?如果查询具有连接或子查询等,则它可能缺少同义词或其中一个表没有选择权限。发布 SQL 会有所帮助。

标签: java oracle jdbc connection-string ora-00942


【解决方案1】:

您必须将 Schema Name 与表名一起附加并使用大写字母(我不记得是区分大小写还是只是大写)。

示例: 如果 SCH1 中有一个 Employee Table 并且在 SCH2 中创建了同义词为 SCH2.Employee 的 Emp,那么下面的语句是有效的,

    SELECT * FROM SCH2.emp

在哪里, emp:同义词 SCH2:创建此同义词的架构名称,而不是实际表的架构名称。

【讨论】:

  • 他说这是一个公共同义词,所以不需要模式名称
猜你喜欢
  • 2021-05-02
  • 2015-10-09
  • 1970-01-01
  • 2014-04-27
  • 2017-10-08
  • 2013-12-14
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多