【问题标题】:My application does not have access to my Oracle 11g database sequence我的应用程序无权访问我的 Oracle 11g 数据库序列
【发布时间】:2013-05-14 12:56:59
【问题描述】:

我已通过 JDBC(未指定 sid 或服务)成功连接到我的数据库:com.test.sql.url=jdbc:oracle:thin://@111.222.333.444:1521,但是当我的 java 程序尝试插入使用我创建的序列的行时,我收到错误 java.sql.SQLSyntaxErrorException: ORA-02289: sequence does not exist。我已经在 SQL 开发人员中验证了我的数据库用户的序列存在,所以我认为这是某种权限问题?我最初使用 sys 作为 sysdba 创建了用户,然后创建了一个以新用户身份连接的脚本,并创建了所有必要的表和序列。我在这里想念什么?谢谢。

【问题讨论】:

  • 你的代码是什么样的?
  • @hol dbConnection.prepareStatement("select ticket_seq.NextVal from dual");
  • 是否需要设置架构?喜欢myschema.ticket_seq.next_val
  • @hol 我已经手动(不在我的应用程序中)尝试使用模式,但它仍然说序列不存在(在 t 下有一个 *,所以它找不到ticket_seq)我已经仔细检查了名称和序列 ticket_seq 在 sql developer 中对我的应用程序使用的相同用户/密码可见。但是当我在 sqlplus 中时,我也无法从中选择。
  • 另外有趣的是,当我使用 sys 作为 sysdba 运行命令 select userSchema.ticket_seq.nextval from dual 时,序列也不存在。

标签: oracle11g


【解决方案1】:

我发现了问题所在。这实际上是我的数据库创建脚本的问题。我用CREATE SEQUENCE "ticket_seq" START WITH 10; 创建了这个序列,所以双引号强制区分大小写。我现在知道 Oracle 表/序列等默认不区分大小写,因此命令 select ticket_seq.nextval from dual 被解释为 SELECT TICKET_SEQ.NEXTVAL FROM DUAL,因此找不到我的小写序列。我从脚本中删除了双引号,现在可以按预期找到序列。

【讨论】:

  • 有趣。感谢分享解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
相关资源
最近更新 更多