0

我有几个用于测试数据的 SQL 语句。有一堆插入语句、一堆选择语句和一堆删除语句。

是否可以将这些插入语句包装在我可以从一行代码运行的东西中?然后,用一个语句,我可以说,执行插入。或者,执行删除语句。

这是我所拥有的一个例子

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 中做到这一点。

4

6 回答 6

5

您可以创建一个存储过程、一个函数或一个作业来封装您的查询,其中 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 中完成。

于 2013-07-05T15:58:23.470 回答
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 中选择文字。) 了解更多

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


当然,Oracle 和DB2 都支持存储过程。存储过程只是一组多条 SQL 语句的一种方式,因此它们可以通过一次调用来执行。

于 2013-07-05T15:53:14.823 回答
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 语句

于 2013-07-05T16:01:23.383 回答
0

将其全部复制到文件中。随心所欲地调用它。并从 SQL*PLUS 作为脚本运行。

窗口中的示例:

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
于 2013-07-06T18:28:01.537 回答
0

使用 oracle,您可以这样做:

insert into mytable
(field1, field2, field3)
select value1, value2, value3
from dual
union
select value4, value5, value6
from dual
etc
于 2013-07-05T15:58:53.097 回答
0

如果您碰巧使用 DB2 for i,您可以像这样插入多行:

insert into mytable
  values (value1, value2, value3),
         (value1, value2, value3),
         (value1, value2, value3),
         (value1, value2, value3);
于 2013-07-05T23:32:46.017 回答