3

99%の時間、カーソルを使用する必要がないことをどこかで読みました。

しかし、この次の状況でカーソルを使用する以外に、他の方法は考えられません。

Select t.flag
From Dual t; 

'Y'これがまたはの4行を返すとしましょう'N'。プロシージャが見つかった場合に何かをトリガーする必要があります'Y'。私は通常、カーソルを宣言し、までループします%NOTFOUND。もっと良い方法があれば教えてください。

また、何か考えがあれば、カーソルを使うのに最適な時期はいつですか。

編集:フラグを挿入する代わりに、 「If 'Y'then triggersomething 」を実行したい場合はどうなりますか?

4

4 に答える 4

2

このようなもの:

INSERT INTO TBL_FLAG (col)
SELECT ID FROM Dual where flag = 'Y'

最近のほとんどのDBMSはセットベースの操作を実行するように設定されているため、手続き型操作の代わりにセットベースを使用すると、通常、パフォーマンスが向上します。あなたはここでもっと読むことができます。

于 2012-06-05T21:47:30.083 に答える
2

あなたのケースは間違いなく99%に該当します。

を使用して、条件付き挿入を簡単に実行できますinsert into ... select...select挿入したい結果を返すのは問題または作成です。

それぞれに1つのレコードを挿入する場合は'Y'、を使用してクエリを使用しますwhere flag = 'Y'。少なくとも1つあるかどうかに応じて、単一のレコードのみを挿入する場合は、クエリ'Y'に追加できdistinctます。

カーソルは、何かをより複雑にするときに役立ちます。たとえば、1つのテーブルにレコードを挿入または更新する必要がある場合や、レコードごとに1つ以上のレコードを他の複数のテーブルに挿入または更新する必要がある場合にカーソルを使用します。

于 2012-06-05T21:56:32.100 に答える
1

よく例は完全に意味がありません。

insert as selectしかし、あなたは私があなたが説明していると思うものの代わりにいつでもステートメントを書くことができます

于 2012-06-05T21:45:47.703 に答える
0

カーソルは、1つのテーブルの列値が、異なるテーブルの複数のクエリで繰り返し使用される場合に使用するのが最適です。

id_test列の値が、カーソルCUR_TESTを使用してMY_TEST_TBLからフェッチされたとします。これで、このid_test列はMY_TEST_TBLの外部キーになります。id_testを使用してテーブルA_TBL、B_TBL、およびC_TBLの行を挿入または更新する場合は、複雑なクエリを使用する代わりにカーソルを使用するのが最適です。

これがカーソルの目的を理解するのに役立つことを願っています

于 2014-03-11T09:53:54.657 に答える