Ако използвате СУБД като MySQL или SQL Server, синтаксисът за вмъкване на множество редове in в таблица с един израз е доста ясен.
Но ако използвате Oracle Database, ще трябва да използвате различен синтаксис.
Опция 1:Използвайте SELECT
Запитване
Първата опция е да използвате SELECT
изявление за всеки ред, който трябва да бъде вмъкнат:
INSERT INTO Products (ProductId, ProductName, Price)
WITH p AS (
SELECT 1, 'Left Handed Screwdriver', 10.50 FROM dual UNION ALL
SELECT 2, 'Right Handed Screwdriver', 22.75 FROM dual UNION ALL
SELECT 3, 'Bottomless Coffee Cup (4 pack)', 15.00 FROM dual UNION ALL
SELECT 4, 'Urban Dictionary Version 2.3', 75 FROM dual UNION ALL
SELECT 5, 'Beer Water', 15 FROM dual
)
SELECT * FROM p;
Трябва да включим FROM dual
за всеки ред, UNION ALL
за да комбинирате всеки SELECT
оператор, както и крайния SELECT
изявление.
Вариант 2:Използвайте INSERT ALL
Друга възможност е да използвате INSERT ALL
изявление:
INSERT ALL
INTO Products ( ProductId, ProductName, Price ) VALUES ( 1, 'Left Handed Screwdriver', 10.50 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 2, 'Right Handed Screwdriver', 22.75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 4, 'Urban Dictionary Version 2.3', 75 )
INTO Products ( ProductId, ProductName, Price ) VALUES ( 5, 'Beer Water', 15 )
SELECT 1 FROM dual;
Не забравяйте да включите последния ред за избор от dual
.
Опция 3:Използвайте няколко INSERT INTO
Изявления
Друг начин да го направите е да използвате INSERT INTO
изявления:
INSERT INTO Products VALUES ( 1, 'Left Handed Screwdriver', 10.50 );
INSERT INTO Products VALUES ( 2, 'Right Handed Screwdriver', 22.75 );
INSERT INTO Products VALUES ( 3, 'Bottomless Coffee Cup (4 pack)', 15.00 );
INSERT INTO Products VALUES ( 4, 'Urban Dictionary Version 2.3', 75 );
INSERT INTO Products VALUES ( 5, 'Beer Water', 15 );
Може да откриете, че това работи много по-бавно от предишните два метода, ако имате много редове за вмъкване.
Опция 4:Използвайте SQL*Loader
Ако имате много редове за вмъкване и може би ако го правите редовно, може да искате да разгледате SQL*Loader.
SQL*Loader е помощна програма, която ви позволява да зареждате данни от външни файлове в таблици на Oracle Database.
Използвайки горните примери, съдържанието на нашия контролен файл може да изглежда така:
load data
infile 'products.csv'
into table Products
fields terminated by "," optionally enclosed by '"'
( ProductId, ProductName, Price )
Където products.csv
е файлът, който съдържа всички редове за вмъкване.
И след това зареждането на данните може да изглежда така:
sqlldr <username> control=load_products.ctl
Където <username>
е нашето потребителско име и load_products.ctl
е нашият контролен файл.
Вижте документацията на Oracle за SQL*Loader за повече информация как да го използвате.