gpt4 book ai didi

oracle - "Create table as select"不保留不为空

转载 作者:行者123 更新时间:2023-12-05 00:29:09 25 4
gpt4 key购买 nike

我正在尝试使用 Oracle 的“按选择创建表”功能进行快速更新。我看到的问题是“空”字段没有被保留。

我定义了下表:

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)

但是,当我对帐户名进行替换时,不会保留 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字段不再有空值,并且 varchar2字段从 40 个字符变为 160 个字符。有没有人见过这个?

最佳答案

这是因为您不再选择 ACCOUNTNAME ,它有一个列定义和元数据。相反,您正在选择一个字符串,即 replace 的结果函数,它没有任何元数据。这是完全不同的数据类型。

一种(可能)更好的方法是使用原始列的查询创建表,但使用 WHERE保证 0 行的子句。

然后你可以用你的实际SELECT正常插入到表格中.

通过查询 0 行,您仍将获得列元数据,因此应该创建表,但不会插入任何行。确保您制作了 WHERE条款很快,比如 WHERE primary_key = -999999 ,一些你知道永远不会存在的数字。

关于oracle - "Create table as select"不保留不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17732648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com