如何通过将NULL值传递给列来从另一个表创建表?

时间:2017-04-27 07:50:29

标签: database oracle oracle10g ddl

我正在尝试使用CREATE AS SELECT创建一个表格,我希望将NULL值传递给col3

main的结构:

SQL> desc main
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
col1                                       NOT NULL NUMBER(10)
col2                                                VARCHAR2(15)
col3                                                BLOB
col4                                                VARCHAR2(15)

我尝试了以下两种方法:

方法1:

CREATE TABLE temp
(   
col1, col2, col3, col4
) AS
SELECT 
col1, col2, NULL, col4
FROM main;

方法2:

CREATE TABLE temp
(   
col1, col2, col3, col4
) AS
SELECT 
col1, col2, 'NULL', col4
FROM main;

在方法2中,我的col3数据类型已从BLOB更改为CHAR(4)

我想使用一个命令来创建 temp 表,并保持数据类型与保存 NULL 值的表相同col3

1 个答案:

答案 0 :(得分:2)

对于BLOB,您应该使用EMPTY_BLOB而不是NULL

SQL> desc main;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER(10)
 COL2                                               VARCHAR2(15)
 COL3                                               BLOB
 COL4                                               VARCHAR2(15)

SQL> create table temp ( col1, col2, col3, col4)
  2  as select col1, col2, empty_blob(), col4
  3  from main;

Table created.

SQL> desc temp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER(10)
 COL2                                               VARCHAR2(15)
 COL3                                               BLOB
 COL4                                               VARCHAR2(15)