[英]Load data via SQL * Loader in IDENTITY column in Oracle 12c
我需要使用 SQL* Loader 将数据加载到带有 GENERATE ALWAYS AS IDENTITY 的 Oracle 表中
CREATE TABLE tbl_identity
(
col1 NUMBER(10,0) GENERATED ALWAYS AS IDENTITY(START WITH 7 INCREMENT BY 1) NOT NULL,
col2 VARCHAR2(20)
);
但是当我尝试在此表中加载数据时,出现错误
ORA-32795: cannot insert into a generated always identity column
也许 SQLLDR 中有任何选项可以暂时跳过 IDENTITY?
或者也许有任何想法如何使用 SQLLDR 将数据加载到 GENERATED ALWAYS IDENTITY 列中?
SQLLDR 命令
sqlldr userid=user/passw@TNS control=tbl_identity.ctl log=tbl_identity.log rows=1000 readsize=65535 bindsize=65535
CTL文件
OPTIONS(direct=false)
LOAD DATA
INFILE 'tbl_identity.txt'
INTO TABLE tbl_identity
INSERT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(col1,
col2)
将您的 DDL 从GENERATED ALWAYS
更改为GENERATED BY DEFAULT
我在加载数据之前使用以下脚本:
begin
for rec in (
select owner, table_name, column_name, generation_type
from all_tab_identity_cols
where owner = 'owner '
and generation_type in ('ALWAYS')
and table_name in ('','',......)
)loop
-- before load data
if rec.generation_type = 'ALWAYS' then
execute immediate 'alter table '||rec.owner||'.'||rec.table_name||' modify '||rec.column_name||' generated by default as identity';
end if;
if rec.generation_type = 'BY DEFAULT' then
-- return (after data load)
execute immediate 'alter table '||rec.owner||'.'||rec.table_name||' modify '||rec.column_name||' generated always as identity';
end if;
end loop;
end;
/
然后一切恢复原状。
小心,在查询中列出正确的表!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.