2012-02-04 24 views
2

私はループしてselect文の条件に基づいて変数をインクリメントしようとしているselect文を持っていて、次に変数をoutとして返します。いくつかのフロントエンドコードです。私はOracle 11gを使用しています。私はこれを行うことができるいくつかの方法を見ています...しかし、私はどちらが最良の方法であるかわかりません。私は以下にしようとしていることのいくつかを持っていますが、混乱のためにもう一度やめました。pl/sqlループレコードselect oracle plsql

まず、私はここで

PROCEDURE SEEKER (pMonkeyID IN Number, vMarkCounter OUT Number) 
AS 
BEGIN 

CURSOR seeker_cur IS 
    Select Mokney_approved, Monkey_vaulted 
    from MonkeyBookApps 
    where MonkeyID = pMonkeyID 
    and Monkey_doc_type = 'BANANA' 
    order by docu_approv_timestamp,monkey_doc_type,monkey_doc_approved desc 

OPEN seeker_cur; 

begin 

    OPEN Seeker_cur; 
    vMarkCounter := 0; 

「変数に」私のPROCを設定しています、私はわからないです一部です。条件が満たされていない場合や、if文を実行して、1つ以上のレコードが存在するかどうかを何らかの方法で判断する必要がある場合は、ループして終了する必要がありますか?もしそうなら、それはどのように機能するでしょうか?もう一方の方法をやり遂げることのメリットはありますか?だから... ...私は(下記)やろうとしていますどのようなsudoのコードに行きます:

FOR (however many records) in Seeker_cur 
IF seeker_cur (not found) or (returns no records) 

EXIT or (break for loop); 
ELSE 
LOOP 

vMarkCounter := vMarkCounter + 1; 

EXIT WHEN seeker_cur is out of records (somehow) 
END IF; 
END LOOP; 

END; 
END SEEKER; 

私はこれを行うには、いくつかの方法があることを確認しています。どのような方法をお勧めしますか?

+1

ここでCOUNT()を使用していない理由はありますか?なぜループするのですか? – eaolson

答えて

7

は、なぜあなたは暗黙カーソルを使用していけない、それが開いて、自分自身を閉じます:

SELECT COUNT(*) 
INTO l_some_local_variable 
FROM monkey_book_apps 
WHERE monkey_id = p_monkey_id 
    AND monkey_doc_type = 'BANANA'; 

RETURN l_some_local_variable; 

PLの回避:

DECLARE 

CURSOR seeker_cur IS 
    Select Mokney_approved, Monkey_vaulted 
    from MonkeyBookApps 
    where MonkeyID = pMonkeyID 
    and Monkey_doc_type = 'BANANA' 
    order by docu_approv_timestamp,monkey_doc_type,monkey_doc_approved desc; 

    vMarkCounter number:=0; 

BEGIN 

    FOR i IN seeker_cur 
    LOOP 
    vMarkCounter := vMarkCounter+1; 
    END LOOP; 

    dbms_output.put_line(vMarkCounter); 
END; 
+0

ありがとうございます! –

2

解決策は、あなたの問題は、このような単純なものかもしれないと私には思えます/ SQLループを作成し、可能な限り単純なSQLを使用することは、ほとんどの場合、最も効率的な方法です。 Tom Kyteは、 "slow-by-slow"のLOOPの行ごとの実行を呼び出します。

関連する問題