2016-08-17 2 views
-1

大文字と小文字のすべての国でインドとイスラエルを印刷する必要があります。PLS-00103:次のいずれかが予想される場合、シンボル "LOOP"が検出されました:

私は、次のエラーを取得しています:

PLS-00103: Encountered the symbol "LOOP" when expecting one of the following: if

にはどうすればいいのインデックスこの配列はアルファベット順に国を表示することができますか?

DECLARE 
    type idtable IS TABLE OF COUNTRIES.COUNTRY_ID%TYPE; 
    type nametable IS TABLE OF COUNTRIES.COUNTRY_NAME%TYPE; 
    idtab idtable; 
    nametab nametable; 
    total INTEGER; 

    CURSOR c1 IS 
    SELECT country_id, country_name 
    FROM countries; 

BEGIN 
    OPEN c1; 
    FETCH c1 BULK COLLECT INTO idtab, nametab; 
    CLOSE c1; 


    for i =1 in nametab.FIRST .. nametab.LAST LOOP 
    IF (nametab(i)) = 'India' 
     THEN dbms_output.put_line(UPPER((nametab(i)))); 
     ELSIF (nametab(i)) = 'Israel' 
     THEN dbms_output.put_line(UPPER((nametab(i)))); 
     ELSE DBMS_OUTPUT.PUT_LINE (nametab(i)); 
    END LOOP; 

    END; 
+0

あなたのブロックが一つだけのミスを除いて正しいです。 CまたはC++ループとは異なり、PLSQLでは初期化する必要はありません。だからforループのi = 1が間違っている。 '= 1'を削除しても問題ありません。 – XING

+0

ようこそスタックオーバーフロー!スタックオーバーフローへようこそ!問題を解決するための努力をして、内容の中でより良いタイトルと詳細な情報をお持ちいただけますか? – manetsus

答えて

1
DECLARE 
    TYPE idtable IS TABLE OF COUNTRIES.COUNTRY_ID%TYPE; 

    TYPE nametable IS TABLE OF COUNTRIES.COUNTRY_NAME%TYPE; 

    idtab  idtable; 
    nametab nametable; 
    total  INTEGER; 

    CURSOR c1 
    IS 
     SELECT country_id, country_name FROM countries; 
BEGIN 
    OPEN c1; 

    FETCH c1 BULK COLLECT INTO idtab, nametab; 

    CLOSE c1; 

    FOR i IN nametab.FIRST .. nametab.LAST 
    LOOP 
     IF (nametab (i)) = 'India' THEN 
     DBMS_OUTPUT.put_line (UPPER ((nametab (i)))); 
     ELSIF (nametab (i)) = 'Israel' THEN 
     DBMS_OUTPUT.put_line (UPPER ((nametab (i)))); 
     ELSE 
     DBMS_OUTPUT.PUT_LINE (nametab (i)); 
     END IF; 
    END LOOP; 
END; 
関連する問題