【问题标题】:How Oracle insert statement workOracle 插入语句的工作原理
【发布时间】:2019-01-22 02:50:38
【问题描述】:

假设我有一个相应的包含以下列的 tableX -
id | name | description | contact_no

现在如果我执行插入操作
insert into tableX(id, contact_no, name, description) value(?,?,?,?)

[注意列的顺序]

oracle 将按什么顺序插入每一列的值?
i) 根据insert 声明
ii) 根据表格中的列顺序X
iii) 或 oracle 按字母顺序对列进行排序 [id, contact_no, description, name] 并相应地放置它们。

【问题讨论】:

  • 只是想知道 - 为什么(选项 iii)你会认为它可能是字母顺序的?你是从哪里得到这个想法的?
  • @JeffreyKemp Hibernate 在持久化的同时进行排序。我想知道甲骨文是否在下面做那种事情!
  • @JeffreyKemp 让我解释一下我遇到的情况,在我的一个domain 中,我有一个名为description 的属性,其数据类型是LOBdescription 之后还有一些其他字段,其数据类型是原始类型。在执行persist 操作时,我得到了 ORA-24816 异常。为了解决这个错误,我将字段名称重命名为 zzzDescription,这导致 hibernate 将此字段放在插入查询的末尾。
  • 这与按字母顺序排列列名无关。听起来 Hibernate 有点奇怪,这本身就是一个完整的问题......
  • @JeffreyKemp 是 oracle 的问题。 Oracle 不能在任何原始类型之前插入包含任何 clob 数据的行。我得到的确切错误是否则 ORA-24816:在抛出实际 LONG 或 LOB 列后提供扩展的非 LONG 绑定数据

标签: oracle hibernate spring-mvc


【解决方案1】:

它将根据列列表放置值:

insert into tableX(id, contact_no, name, description)
                -- 1st 2nd         3rd   4th
values(1st, 2nd, 3rd, 4th);

如果你省略列列表,那么你会得到"blind insert"(common anti-pattern)。

【讨论】:

    【解决方案2】:

    根据你指定的列从左到右插入

    insert into tableX(id, contact_no, name, description) value(1,2,3,4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 2016-09-19
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多