减少sqlplus中的重复

减少sqlplus中的重复,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我正在使用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

我正在使用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') );

该名称在许多插入中都很常见。如何避免重复查询相同名称的地址选项卡?

您可以使用子查询或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
时,您应该指定要插入的列的名称。这有助于防止将来出现问题。

您可以使用子查询或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
时,您应该指定要插入的列的名称。这有助于防止将来出现问题。

您可以使用子查询或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
时,您应该指定要插入的列的名称。这有助于防止将来出现问题。

您可以使用子查询或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
时,您应该指定要插入的列的名称。这有助于防止将来出现问题。

如果源数据是带有delimeters的文本文件,则可以使用Excel或正则表达式生成sql脚本


还可以将源数据加载到中间表中。然后将此表与“address”表联接,并将结果插入“tab”表。

如果源数据是带有delimeters的文本文件,则可以使用Excel或正则表达式生成sql脚本


还可以将源数据加载到中间表中。然后将此表与“address”表联接,并将结果插入“tab”表。

如果源数据是带有delimeters的文本文件,则可以使用Excel或正则表达式生成sql脚本


还可以将源数据加载到中间表中。然后将此表与“address”表联接,并将结果插入“tab”表。

如果源数据是带有delimeters的文本文件,则可以使用Excel或正则表达式生成sql脚本

还可以将源数据加载到中间表中。然后将该表与“地址”表联接,并将结果插入“制表符”表中