INSERT ALL有兩種不同的用途。一種是將不同的選定列的子集插入表中。另一種是根據特定的標準將行引入不同的行。在這兩種情況下,數據都來自SELECT子句,而不是來自VALUES。 See the examples in the documentation。
通常情況下,您只需將可能寫入多個INSERT
語句在一個單一的PL/SQL塊。像
begin
Insert Into Patient Values
('101', '1 house', Null, 'Kingston', 'Surrey', 'KT1 1XX', '10/jan/1980', 'm', 01452987456);
Insert Into Patient Values
('102', '2 egg rd', 'vail', 'guildford', 'Surrey', 'GU1 1LL', '05/dec/1985', 'm', 01452987456);
Insert Into Patient Values
('103', '6 station rd', Null, 'guildford', 'Surrey', 'GU1 2XX', '15/may/1990', 'f', 01452987456);
end;
/
的東西,如果你真的想這樣做,在一個SQL語句,你可以做一個INSERT ... SELECT
但是這通常會比使用三個獨立的報表更加複雜。
insert into patient
select *
from (select '101' id, '1 house' addr, null col1, 'Kingston' city, ...
from dual
union all
select '102', '2 egg rd', 'vail', 'guildford', 'Surrey', 'GU1 1LL', '05/dec/1985', 'm', 01452987456
from dual
union all
select '103', '6 station rd', Null, 'guildford', 'Surrey', 'GU1 2XX', '15/may/1990', 'f', 01452987456
from dual)
我還要提醒你使用正確的數據類型,並在您INSERT
語句中指定的列名。我猜測,例如,Patient
表的第一列是某種PatientID
,它被定義爲NUMBER
。如果是這樣,你真的想要插入一個數字而不是一個字符串。類似地,第15列的'15/may/1990'值可能在表中定義爲DATE
。如果是這樣,你INSERT
應該明確地調用TO_DATE
與特定的格式掩碼或使用ANSI日期格式,即date '1980-01-10'
插入DATE
不是一個字符串。如果您希望最後一列保留前導0,則需要確保數據庫中的列被定義爲VARCHAR2
,並且您插入的是字符串而不是數字。
我從來沒有看到'插入所有'...你需要它是一個單一的指令插入? – 2012-03-09 14:10:03
要獲得版本'從雙選擇v $版本;' – 2012-03-09 15:27:19
如果您收到任何錯誤,會發生什麼錯誤? – 2012-03-09 15:28:03