2011-04-20 5 views
1
UPDATE TABLE SET SOMETHING = 1 WHERE ID IN (SELECT ID FROM STORED_PROCEDURE) 

レコードストアドプロシージャから= 2100の更新 - (!31M)表におけるフェッチの膨大

レコード= 50

フェッチの膨大な量をcousingこのステートメントFirebirdの2.5でサーバ。どうして?最初にストアドプロシージャからidを選択してwhere節に入れてはいけませんか?それを機能させるために私は何をすべきですか?

+0

@JustMe:STORED_PROCEDUREは、テーブルや関数であり、後者の場合の手順は、データベースへのアクセスの面で何をやっているの? –

+0

@Bobこれは選択可能なストアドプロシージャです - "select for"をサスペンドで使用します – JustMe

+0

@JustMe:OK - ストアドプロシージャはデータベースアクセスに関して何をしますか? –

答えて

1

このような何か試してみてください:

declare variable myid integer;  
begin 
    for 
     select id from stored_procedure into :myID 
    do begin 
     update table set something = 1 where table.id = :myID; 
    end 
end 
+0

はい、あまりにも多くのフェッチを防ぐ – JustMe

関連する問題