2017-08-12 2 views
0

これは私のPL/SQLでWHILE以下LOOPコード:私は、このwhileループを実行空白の結果を取得中にPL/SQLのループ

SET SERVEROUTPUT ON; 

DECLARE 
l_check NUMBER; 
BEGIN 
WHILE (l_check < 5) 
LOOP 
l_check := l_check + 1; 
DBMS_OUTPUT.PUT_LINE(l_check); 
END LOOP; 
END; 

は、それがメッセージに表示されていることPL/SQLプロシージャが正常に完了しました。しかし、SET SERVEROUTPUT ONを使用していても空白の結果が出ます。

答えて

1

l_checkは初期化されていないため、初めてWHILEループでテストされたときはNULLです。 NULLは5より小さくないので、コードは決してループに入りません。

SET SERVEROUTPUT ON; 

DECLARE 
    l_check NUMBER := 0; 
BEGIN 
    WHILE (l_check < 5) 
    LOOP 
     l_check := l_check + 1; 
     DBMS_OUTPUT.PUT_LINE(l_check); 
    END LOOP; 
END; 
+0

DECLARE l_check番号:

は、ループの前に変数を初期化しようとし= 1。 (l_check <5) l_check:= l_check + 1; END LOOP; END; l_check:= l_check + 1の前にDBMS_OUTPUT文を置いたときに機能しました。 – stranger

+0

@stranger - 重要な変更は 'l_check NUMBER:= 1;'です。変数に値を代入すると、WHILE条件をテストするときにnullではないことを意味します。 – APC

+0

(DECLAREセクションまたは実行セクション内で)初期値(0または1など)を実行し、 'l_check'の現在の値(インクリメント前またはインクリメント後)は、正確にどの値が出力されるか以外はほとんど効果がありません。彼らはすべて同じように動作します。値を1から4または1から5などにしたい場合は、初期値、 'PUT_LINE'コマンドの配置、および/または終了条件を調整することができます(' l_check <5'と ' = 5 'など) – mathguy

関連する問題