昨天写了两条insert 语句:
insert into tsys_doctypedef (doctypeid,ismainimg,doctypename) values ('10J','Y','数字签名投保单及风险提示书');
insert into tsys_doctypedef (doctypeid,ismainimg,doctypename) values ('10K','Y','神行太保拍摄投保资料(证件类)');
commit;
结果放在plsql中执行,发现报非法字符错误。于是开始找原因,doctypeid是表tsys_doctypedef 的主键并且不是序列化的,其他的两个字段分别是字符型和可变长度字符型的。
令我纠结的还有:这样的语句在我这里运行时会报错,旁边同事那里却没有问题……
于是决定在网上找原因,找到如下文字:
在oracle中使用DML语言的insert语句来向表格中插入数据,先介绍每次只能插入一条数据的语法
INSERT
注意:
当对表中所有的列进行赋值,那么列名列表可以省略,小括号也随之省略必须对表中的非空字段进行赋值
具有默认值的字段可以不提供值,此时列名列表中的相应的列名也要省略
举例:有如下表格定义
create table book(bookid char(10) not null , name varchar2(60),price number(5,3))
使用下面的语句来插入数据
INSERT INTO BOOK(bookid,name,price)
INSERT INTO BOOK
INSERT INTO BOOK(bookid)
由于bookid是非空,所以,对于book来说,至少要对bookid进行赋值,虽然这样的数据不完整
如果想往一个表格中插入多条数据,那么带有values子句的insert就不行了,这时候必须使用insert语句和select语句进行配合来实现同时插入多条数据:
例如:现在有一个空表a和一个有数据的表格b,他们的结构是一样, 把b表中的所有数据插入到a表中的语句是:
INSERT INTO A (列1,列2,列3)
--查询语句中可以使用任意复杂的条件或者子查询
如果数据的来源不是现存表的数据,也想多条插入那么使用如下的方法:
INSERT INTO
SELECT
UNION
SELECT
UNION
SELECT
如果上面的值有字符和日期型数据,那么使用单引号即可,每一个select语句得到一条数据,然后使用集合操作符union把多条数据合并到一个结果集中,来实现一次插入多条数据的功能。