插入带有空值的语句而不定义所有列

问题描述

我需要将 100 多行数据插入具有 25 个文本列的表中。 我只想在这些列中插入一些数据,其余的用空格表示。

(注意:PeopleSoft 表上的文本字段被定义为 NOT NULLABLE,单个空格字符用于表示没有数据而不是 null。)

有没有一种方法可以编写不定义所有列以及空格的插入语句。举个例子:

INSERT INTO CUST.RECORD(BUSInesS_UNIT,PROJECT_ID,EFF_STATUS,TMPL,DESCR) VALUES('TOO1','PROJ1','A','USA00','USA00 CONTRACT');

对于 CUST.RECORD 中的所有其他列,我想插入“ ”而不定义插入中的列或空格。

解决方法

一种方法是在表定义中设置默认值,如下所示:

CREATE TABLE CUST.RECORD(
  id          NUMBER DEFAULT detail_seq.NEXTVAL,master_id   varchar2(10) DEFAULT ' ',description VARCHAR2(30)
);

编辑:对于您的表格,您可以使用:

alter table  CUST.RECORD modify( col2 varchar2(10) default ' ' );
,

您不必为特定列提供值IF任一条件为真:

  1. 该列被定义为可以为空。也就是说,它不是用“not null”子句定义的。

  1. 用默认值定义列

    SQL> 创建表 my_test(my_id 号不为空, 2 fname varchar2(10),-- 可以为空 3 dob date default sysdate -- 默认值 4) 5;

    表已创建。

    SQL> -- SQL> -- 只为 my_id 提供值 SQL> 插入 my_test(my_id) 值 (1);

    已创建 1 行。

    SQL> -- SQL> -- 并查看结果 SQL>选择* 2 来自 my_test;

      MY_ID FNAME      DOB
    

          1            12-MAR-21
    

    选择了 1 行。

    SQL> -- SQL> 选择 my_id, 2 nvl(fname,'NULL'),3 多 4 来自 my_test;

      MY_ID NVL(FNAME,DOB
    

          1 NULL       12-MAR-21
    

    选择了 1 行。