【问题标题】:Turn ON OFF IDENTITY INSERT equivalent in Oracle在 Oracle 中打开 OFF IDENTITY INSERT 等效项
【发布时间】:2021-11-10 13:27:04
【问题描述】:

我的 DWH 设计中有以下 ProductCategory 维度,以免丢失数据:

ProductSK ProductID ProductName BI_StartDate BI_EndDate
-1        -1        Undefined   99991231     99991231

ProductSK 是一个标识列。

我习惯在 SQL Server 中使用 Turn ON/OFF Identity Insert,如何在 Oracle 中做同样的事情?

这是我的维度 DDL:

CREATE TABLE ProductCategory (
    ProductSK NUMBER GENERATED ALWAYS AS IDENTITY,
    ProductID NUMBER NOT NULL,
    ProductName VARCHAR2(100) NOT NULL,
    BI_StartDate NUMBER NOT NULL,
    BI_EndDate NUMBER NOT NULL,

);

SQL Server 中的等价物:

SET IDENTITY_INSERT sometableWithIdentity ON;
SET IDENTITY_INSERT sometableWithIdentity OFF;

【问题讨论】:

  • 请显示您的表格的 DDL。这取决于自动增量列的generated 属性值
  • @astentx 问题已更新
  • 谢谢。然后您必须根据提供的答案(generated by default)更改列。

标签: sql sql-server oracle tsql identity-column


【解决方案1】:

在 SQL Server 中

set identity on 允许将显式值插入到 表的标识列。

基本上,您可以打开和关闭插入标识列的可能性,标识列定义为基于间隔的数字序列。

在 Oracle 中,您可以选择使用 IDENTITY GENERATED BY DEFAULT

GENERATED BY DEFAULT:Oracle 为标识列生成一个值 如果你没有提供任何价值。如果您提供一个值,Oracle 将插入 将该值放入标识列。对于此选项,Oracle 将 如果将 NULL 值插入标识列,则会发出错误。

例子

SQL> create table x ( c1 number generated by default as identity start with 1 increment by 1 , c2 number ) ;

Table created.

SQL> insert into x ( c2 ) values ( 1 ) ;

1 row created.

SQL> insert into x ( c1, c2 ) values ( 2, 2 ) ;

1 row created.

SQL> select * from x ;

        C1         C2
---------- ----------
         1          1
         2          2

此选项允许您插入或不插入(这是一种打开/关闭),在某种意义上非常类似于 SQL Server 的打开/关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多