0

テストデータ用の SQL ステートメントがいくつかあります。たくさんの挿入ステートメント、たくさんの選択ステートメント、そしてたくさんの削除ステートメントがあります。

これらの挿入ステートメントを 1 行のコードから実行できるものにラップすることは可能ですか? 次に、1 つのステートメントで、挿入を実行します。または、delete ステートメントを実行します。

ここに私が持っているものの例があります

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

そして、私が知る限り、オラクルでも実行できます。

于 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 の両方がストアド プロシージャをサポートしています。ストアド プロシージャは、1 回の呼び出しで実行できるように、複数の 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

オラクルを使用すると、次のことができます。

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 に答える