【问题标题】:Specify name of Oracle IDENTITY sequence?指定 Oracle IDENTITY 序列的名称?
【发布时间】:2019-08-27 21:01:35
【问题描述】:

我正在使用 Doctrine 连接到 Oracle 数据库。目前我只是在本地测试。

但是,当我们转移到生产环境时,似乎无法指定 IDENTITY 序列名称,因此它在生产环境和本地环境中被镜像。如果它们不相同,那么在发送到生产之前进行测试时会变得非常困难。

有没有办法为 IDENTITY 列指定序列名称?

【问题讨论】:

  • 您需要使用identity吗?您能否创建一个序列并将该序列的nextval 设置为您的列的默认值?这基本上做同样的事情,但让你明确命名序列。
  • 标识列是在 12c 中引入的。如果您的测试环境是 12c 并且您使用标识列,那么生产环境也应该至少是 12c。否则,整个概念就没有意义。例如,如果生产是 11g,则不应使用标识列,因为它不起作用,您必须重写所有内容并再次测试。那么:真正涉及哪些版本?
  • 都是12c。但是我注意到,尝试在 Doctrine 中将所有 3 个序列名称结合起来意味着使用系统生成的名称手动更改每个环境的实体类中的序列名称(由于 IDENTITY)。我认为的第一条评论就是这个问题的答案。只是想知道是否有其他人有这方面的经验。我对 Oracle 还很陌生,但如果 IDENTITY 列都生成随机序列名称,即使乍一看似乎也无法跨多个环境使用。
  • 所以在玩了一点 Doctrine 之后,它似乎确实支持 IDENTITY 作为 @GeneratedValue 但我在文档中的任何地方都看不到。我今天会确保并更新答案。这意味着我不必在 Doctrine 中指定序列名称

标签: oracle doctrine-orm oracle12c


【解决方案1】:

Data_default 列提供该列的默认值(long)。如果将其转换为字符串(使用 dbms_output.put_line),您将获得序列的名称。

选择data_default 来自 all_tab_columns 其中 table_name ='' 和 column_name='';

【讨论】:

  • 您能否编辑您的答案以包括对您的代码的解释?这将有助于未来的读者更好地了解正在发生的事情,尤其是那些刚接触该语言并难以理解概念的社区成员。
猜你喜欢
  • 2011-07-30
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多