如何解决如何使用SQL或PLSQL将多行数据插入Oracle的表中?
我已经为此苦苦挣扎了好几天,但是不能同时插入多行。这只是基本内容,请参见下文。在Oracle Application Express 5.1.4.00.08中工作。
insert into historie (mnr,beginjaar,begindatum,einddatum,afd,maandsal,opmerkingen)
values (7499,1988,'01-06-1988','01-07-1989',30,1000,' ');
insert into historie (mnr,1989,'01-12-1993',1300,' ');
它一次只能接受1行,而当我尝试多行时,就会出现此一般错误:
ORA-00933:sql命令未正确结束
解决方法
使用INSERT ... SELECT
:
insert into historie (mnr,beginjaar,begindatum,einddatum,afd,maandsal,opmerkingen)
SELECT 7499,1988,DATE '1988-06-01',DATE '1989-07-01',30,1000,' ' FROM DUAL UNION ALL
SELECT 7499,1989,DATE '1993-12-01',1300,' ' FROM DUAL;
或者,使用INSERT ALL
:
INSERT ALL
INTO historie (mnr,opmerkingen)
VALUES ( 7499,' ' )
INTO historie (mnr,opmerkingen)
VALUES ( 7499,' ' )
SELECT * FROM DUAL;
请勿将DATE
值作为字符串插入,因为这需要Oracle执行隐式的字符串到日期的转换,并且如果NLS_DATE_FORMAT
会话参数发生更改,则您的代码将停止工作。而是使用TO_DATE
显式执行转换,或使用日期文字(如DATE '1988-06-01'
)。
此外,如果beginjaar
列与begindatum
列的年份相同,则使用虚拟列而不是重复数据(因为重复的数据可能不同步)。例如:
CREATE TABLE historie (
mnr NUMBER,beginjaar NUMBER
GENERATED ALWAYS AS ( EXTRACT( YEAR FROM begindatum ) ) VIRTUAL,begindatum DATE,einddatum DATE,afd NUMBER,maandsal NUMBER,opmerkingen VARCHAR2(20)
);
然后:
insert into historie (mnr,' ' FROM DUAL;
和:
SELECT * FROM historie;
输出:
MNR | BEGINJAAR | BEGINDATUM | EINDDATUM | AFD | MAANDSAL | OPMERKINGEN ---: | --------: | :------------------ | :------------------ | --: | -------: | :---------- 7499 | 1988 | 1988-06-01 00:00:00 | 1989-07-01 00:00:00 | 30 | 1000 | 7499 | 1989 | 1989-07-01 00:00:00 | 1993-12-01 00:00:00 | 30 | 1300 |
db 提琴here
, SQL Workshop,对吗?将这些命令包括在begin-end
块中(并使其变为PL / SQL):
begin
insert into historie ...;
insert into historie ...;
end;
/
,然后按下RUN
按钮。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。