xXx*_*xXx 2 sql t-sql sql-server oracle identity-column
我的 DWH 设计中有以下 ProductCategory 维度,以免丢失数据:
ProductSK ProductID ProductName BI_StartDate BI_EndDate
-1 -1 Undefined 99991231 99991231
Run Code Online (Sandbox Code Playgroud)
ProductSK 是一个标识列。
我习惯在 SQL Server 中使用“打开/关闭身份插入”,如何在 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,
);
Run Code Online (Sandbox Code Playgroud)
SQL Server 中的等效项:
SET IDENTITY_INSERT sometableWithIdentity ON;
SET IDENTITY_INSERT sometableWithIdentity OFF;
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 中
set identity on允许将显式值插入到表的标识列中。
基本上,您可以打开和关闭插入到标识列的可能性,标识列被定义为基于间隔的数字序列。
在 Oracle 中,您可以选择使用IDENTITY GENERATED BY DEFAULT
GENERATED BY DEFAULT:如果您未提供值,Oracle 会为标识列生成一个值。如果您提供一个值,Oracle 会将该值插入到标识列中。对于此选项,如果将 NULL 值插入标识列,Oracle 将发出错误。
例子
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
Run Code Online (Sandbox Code Playgroud)
此选项允许您插入或不插入(这是一种打开/关闭),在某种意义上与 SQL Server 打开/关闭非常相似。
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |