我使用sqlplus进行一批插入(遗憾的是我无法使用sqlldr)。每个insert语句都需要来自另一个表的值,如:
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
?
答案 0 :(得分: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
时,您应该指定要插入的列的名称。这有助于防止未来出现问题。
答案 1 :(得分:0)
如果源数据是带有分隔符的文本文件,则可以使用Excel或正则表达式生成sql脚本。
您也可以将源数据加载到中间表中。然后将此表与"地址"表格和插入结果在" tab"表