INSERT ALL имеет два различных использования.Одним из них является вставка различных подмножеств выбранных столбцов в таблицу.Другой состоит в том, чтобы направить ряды в разные по определенным критериям.В обоих случаях данные поступают из предложения SELECT, а не из VALUES. См. Примеры в документации .
Обычно вы просто пишете несколько операторов 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 / май / 1990», вероятно, определен как DATE
в таблице.Если это так, ваш INSERT
должен вставить DATE
не символьную строку, либо явно вызвав TO_DATE
с определенной маской формата, либо используя формат даты ANSI, то есть date '1980-01-10'
.И если вы хотите, чтобы последний столбец сохранил ведущий 0, вам нужно убедиться, что столбец в базе данных определен как VARCHAR2
и что вы вставляете символьную строку вместо числа.