2014-09-19 61 views
0

我正在使用sqlplus做一批插入(不幸的是我不能使用sqlldr)。每個插入語句都需要來自另一個表的值,例如:減少sqlplus中的重複

INSERT INTO tab VALUES (1, 'a', (SELECT id FROM addressTab WHERE name = 'xyz')); 
INSERT INTO tab VALUES (2, 'b', (SELECT id FROM addressTab WHERE name = 'xyz')); 
INSERT INTO tab VALUES (3, 'c', (SELECT id FROM addressTab WHERE name = 'xyz')); 
INSERT INTO tab VALUES (4, 'd', (SELECT id FROM addressTab WHERE name = 'xyz')); 
INSERT INTO tab VALUES (5, 'e', (SELECT id FROM addressTab WHERE name = 'mno')); 
INSERT INTO tab VALUES (6, 'f', (SELECT id FROM addressTab WHERE name = 'mno')); 

該名稱對於許多插入是很常見的。我該如何避免一次又一次地重複查詢同名的addressTab

回答

3

你可以使用子查詢或CTE設置數據:

insert into tab 
    select d.x, d.y, a.id 
    from (select 1 as x, 'a' as y, 'xyz' as name from dual union all 
      . . . 
      select 6, 'f', 'mno' from dual 
     ) d join 
     addressTab a 
     on d.name = a.name; 

如果前兩個值從表中來,那麼這是更容易。

順便說一句,當使用insert時,應指定要插入的列的名稱。這有助於防止未來的問題。

0

如果源數據是帶有delimeters的文本文件,則可以使用Excel或正則表達式生成sql腳本。

您也可以將源數據加載到中間表中。然後將該表與「地址」表聯接起來,並將結果插入「標籤」表中。