1

私は構造の配列を持っています。その配列のすべての行をテーブルに挿入する必要があります。そのため、単純にcfqueryinsidecfloopを使用してデータベースに挿入しました。

データベースへの新しい接続を毎回作成するため、cfloop 内で cfquery を使用しないように提案する人もいました。

しかし、私の場合、cfquery内でcfloopを使用せずにこれを行う方法はありますか?

4

4 に答える 4

0

ループ内のクエリとクエリ内のループの両方を使用しました。クエリ内でループを使用する方が理論的には高速ですが、常にそうであるとは限りません。それぞれの方法を試して、状況に最適なものを確認する必要があります。

データベースを選択するために oracle を使用した、クエリ内のループの構文を次に示します。

insert into table
(field1, field2, etc)
select null, null, etc
from dual
where 1 = 2
<cfloop>
union
select <cfqueryparam value="#value1#">
, <cfqueryparam value="#value2#">
etc
from dual
</cfloop>
于 2014-02-25T13:49:55.550 に答える
0

<CFQUERY><cfloop>を使用するときに実行できる...反復回数には制限があります<cfqueryparam>。これもベンダー固有です。生成するレコードの数がわからない場合<cfqueryparam>は、安全に削除できる場合は、 を削除することをお勧めします。データが信頼できるソースからのものであり、サニタイズされていることを確認してください。このアプローチは、外部ループとは異なり、データベース サーバーへの呼び出しを 1 回だけ行うため、処理時間を大幅に節約できます。

于 2015-09-08T12:55:09.183 に答える
0

データベースによっては、構造体の配列を XML に変換し、それを単一のパラメーターとしてストアド プロシージャに渡します。

ストアド プロシージャで、SELECT ステートメントが XML パケットからデータを選択する INSERT INTO SELECT を実行します。このように、単一の INSERT ステートメントで数百または数千のレコードを挿入できます。

ここに例があります。

于 2014-02-25T19:35:47.703 に答える