我可以在一个语句中运行多个SQL部分吗?

时间:2013-07-05 15:40:39

标签: sql oracle db2

我有几个测试数据的SQL语句。有一堆插入语句,一堆select语句和一堆delete语句。

是否可以将这些insert语句包含在可以从一行代码中运行的内容中?然后,我可以说,有一个语句执行插入。或者,执行删除语句。

以下是我所拥有的一个例子

insert into [table] values (val1, val2, val3);  
insert into [table] values (val1, val2, val3);  
insert into [table] values (val1, val2, val3);  
insert into [table] values (val1, val2, val3);  
insert into [table] values (val1, val2, val3);  

这就是我想象的样子,但由于我不知道它是否可能,这可能看起来很愚蠢。

execute sqlChunk(); 哪个会运行下面的所有内容。

sqlChunk(){   
  insert into [table] values (val1, val2, val3);  
  insert into [table] values (val1, val2, val3);  
  insert into [table] values (val1, val2, val3);  
  insert into [table] values (val1, val2, val3);  
  insert into [table] values (val1, val2, val3);  
}

请注意,我只是将这些语句放在括号中,因为对我来说,它就是这样的(如果可能的话)。我在DB2中运行它。但是也想知道你是否可以在oracle sql中做到这一点。

6 个答案:

答案 0 :(得分:4)

您可以创建一个函数或作业的存储过程来封装您的查询,其中sqlChunk就是这样。

CREATE PROCEDURE sqlChuck
AS
insert into [table] values (val1, val2, val3);
insert into [table] values (val1, val2, val3);
insert into [table] values (val1, val2, val3);
insert into [table] values (val1, val2, val3);
insert into [table] values (val1, val2, val3);

你会称之为:

EXEC sqlChuck

据我所知,它也可以在oracle中完成。

答案 1 :(得分:2)

Oracle支持插入的多表语法,INSERT ALL。它看起来像这样

  insert all
     into table2 values (val1, val2, val3) 
     into table3 values (val1, val3)  
     into table4 values (val1, val4, val5)  
     into table5 values (val1, val2, val4)  
     into table6 values (val1, val2, val2)
  select * from table1;  

请注意,它仅适用于INSERT ... SELECT;我们不能使用VALUES作为来源。 (虽然我们可以从DUAL中选择文字。)Find out more

据我所知,DB2没有类似的语法。


当然,Oracle和DB2 support stored procedures。存储过程只是一组多个SQL语句的一种方式,因此可以通过一次调用执行它们。

答案 2 :(得分:1)

Oracle数据库和DB2都支持匿名SQL块,如下所示:

begin 
 insert into [table] values (val1, val2, val3);  
 insert into [table] values (val1, val2, val3);  
 insert into [table] values (val1, val2, val3);  
 insert into [table] values (val1, val2, val3);  
 insert into [table] values (val1, val2, val3);  
end

在DB2中,这也称为复合SQL 。从应用程序的角度来看,块是单个SQL语句

答案 3 :(得分:0)

使用oracle,你可以这样做:

insert into mytable
(field1, field2, field3)
select value1, value2, value3
from dual
union
select value4, value5, value6
from dual
etc

答案 4 :(得分:0)

如果您碰巧使用DB2 for i,则可以插入多行,如下所示:

insert into mytable
  values (value1, value2, value3),
         (value1, value2, value3),
         (value1, value2, value3),
         (value1, value2, value3);

答案 5 :(得分:0)

将其全部复制到文件中。根据需要调用它。并从SQL * PLUS作为脚本运行。

Windows中的示例:

c:\>sqlplus user/password@database_name @c:\script_name.sql

c:\>sqlplus user/password@database_name
SQL>@script_name.sql

c:\>sqlplus user/password@database_name
SQL>@@all_scripts.sql

@@ all_scripts.sql文件可以包含多个文件:

@script1.sql
@script2.sql
@script3.sql