Oracle 使用空值插入语句,但不定义所有列

Oracle 使用空值插入语句,但不定义所有列,oracle,peoplesoft,Oracle,Peoplesoft,我需要在一个有25个文本列的表中插入100多行数据。 我只想在这些列中插入一些数据,其余的用空白表示 注意:PeopleSoft表上的文本字段定义为不可为null,使用单个空格字符表示无数据,而不是null 是否有一种方法来编写一个INSERT语句,它不定义所有列以及空白区。例如: INSERT INTO CUST.RECORD(BUSINESS_UNIT, PROJECT_ID, EFF_STATUS, TMPL, DESCR) VALUES('TOO1','PROJ1','A','USA00

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

注意:PeopleSoft表上的文本字段定义为不可为null,使用单个空格字符表示无数据,而不是null

是否有一种方法来编写一个INSERT语句,它不定义所有列以及空白区。例如:

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 ' ' );

如果以下任一条件为真,则不必为特定列提供值:

该列定义为可空。也就是说,它不是用“notnull”子句定义的。 或

该列是使用默认值定义的

SQL>创建表my_test my_id号不为空, 2 fname varchar210,-可为空 3 dob日期默认sysdate-默认值 4. 5 ;

表已创建

SQL>- SQL>-仅为我的\u id提供值 SQL>插入my_testmy_id值1

创建了1行

SQL>- SQL>-并查看结果 SQL>选择* 2来自我的大学考试

  MY_ID FNAME      DOB
  MY_ID NVL(FNAME, DOB
选择1行

SQL>- SQL>选择我的\u id, 2 nvlfname,'NULL', 3月日 4来自我的大学考试

  MY_ID FNAME      DOB
  MY_ID NVL(FNAME, DOB
选择1行


这可能会起作用,但表存在,如果没有比手工写出insert更多的工作,就无法删除/重新创建表。我会把它放在我的后口袋里,以备将来使用!可以使用的一种方法是将表定义中的默认值设置为不正确。只要一个列是可空的(定义时没有'not null'子句),它就可以在没有任何数据的情况下插入。@EdStevens看看这个@FarshidShekari-那么你的观点是什么?这篇文章展示了oracle如何改进其关于向表中添加“NOTNULL with default”列的内部处理。OP要求不必为每一列指定数据。也就是说,在二读时,我确实看到了你们写的一个方法是设置默认值,而不知何故,我认为唯一的方法是。。。很抱歉,如果您只是想为一条SQL语句节省一些输入,那么您可能运气不好。但是,如果您希望对许多插入或许多表重复这种模式,则有一些选项可以提供帮助。但任何解决方案都需要创建PL/SQL对象,并且还取决于数据库版本。例如,可能有一种方法可以使用多态表函数,但这至少需要版本18c。