加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – “将表创建为select”不保留not null

发布时间:2021-02-23 11:47:00 所属栏目:站长百科 来源:网络整理
导读:我正在尝试使用Oracle的“Create Table As Select”功能进行快速更新.我看到的问题是“Null”字段没有被保留. 我定义了下表: create table mytable( accountname varchar2(40) not null,username varchar2(40) ); 当我执行原始CTAS时,帐户上的NOT NULL将被

我正在尝试使用Oracle的“Create Table As Select”功能进行快速更新.我看到的问题是“Null”字段没有被保留.

我定义了下表:

create table mytable(
  accountname varchar2(40) not null,username varchar2(40)
 );

当我执行原始CTAS时,帐户上的NOT NULL将被保留:

create table ctamytable as select * from mytable;

 describe ctamytable;

Name        Null     Type         
----------- -------- ------------ 
ACCOUNTNAME NOT NULL VARCHAR2(40)

USERNAME             VARCHAR2(40)

但是,当我在accountname上执行替换时,不会保留NOT NULL.

create table ctamytable as 
   select replace(accountname,'foo','foo2') accountname,username 
     from mytable;

 describe ctamytable;

Name        Null Type          
----------- ---- ------------- 
ACCOUNTNAME      VARCHAR2(160) 
USERNAME         VARCHAR2(40)

请注意,accountname字段不再为null,varchar2字段为40到160个字符.谁看过这个吗?

解决方法

这是因为您不再选择具有列定义和元数据的ACCOUNTNAME.而是选择STRING,即replace函数的结果,它没有任何元数据.这完全是一种不同的数据类型.

可能更好的方法是使用带有原始列的查询创建表,但使用WHERE子句保证0行.

然后您可以使用实际的SELECT正常插入表格.

通过查询0行,您仍将获得列元数据,因此应创建表,但不会插入任何行.确保你的WHERE子句快速,如WHERE primary_key = -999999,你知道的某些数字永远不会存在.

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读