Регистр, вложенный в петлю, PLS-00103: Обнаружен символ ";"при ожидании одного из следующих: случай - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь построить горизонтальную таблицу и назначил запрос с помощью явного курсора QUERY_H. Кроме того, я создал статический список с двумя объектами и назначил его явному курсору QUERY_Q.Но я продолжаю нажимать на ошибку, указанную в заголовке:

ORA-06550: line 113, column 8:
PLS-00103: Encountered the symbol ";" when expecting one of the 
following:

   case
The symbol "case" was substituted for ";" to continue.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Ниже приведена часть используемого скрипта:

FOR QUERY_R IN QUERY_H
    LOOP
    case when QUERY_R.QUERY_HEADER like 'QUERY_Date' then
        FOR record IN QUERY_Q
            LOOP
                  htp.p('<td bgcolor="E6E6D2" align="center" width="40px" height="40px" class="normal12px"><b>&nbsp;'||record.QUERY_Date||'&nbsp;</b></td>');
            END LOOP;
    when QUERY_R.QUERY_HEADER like 'col3' then htp.p('');
    when QUERY_R.QUERY_HEADER like 'col4' then
        htp.p('</tr>
        <tr>
        <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
        FOR record IN QUERY_Q
            LOOP
                  htp.p(record.col4);
            END LOOP;
    when QUERY_R.QUERY_HEADER like 'col5' then
        htp.p('</tr>
        <tr>
        <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
        FOR record IN QUERY_Q
            LOOP
                  htp.p(record.col5);
            END LOOP;
    else htp.p('
        <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
        FOR record IN QUERY_Q
            LOOP
                htp.p('<td width="40px" height="40px" bgcolor="E6E6D2" class="normal12px" align="center">'||record.col6||'</td>');
            END LOOP;
    END;
END LOOP;

что необходимо изменить, чтобы исправить эту ошибку?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2019

Извините, я не могу проверить это прямо сейчас, но вы не должны получить эту ошибку, если используете "END CASE;"в строке 31:

FOR QUERY_R IN QUERY_H
LOOP
case when QUERY_R.QUERY_HEADER like 'QUERY_Date' then
    FOR record IN QUERY_Q
        LOOP
              htp.p('<td bgcolor="E6E6D2" align="center" width="40px" height="40px" class="normal12px"><b>&nbsp;'||record.QUERY_Date||'&nbsp;</b></td>');
        END LOOP;
when QUERY_R.QUERY_HEADER like 'col3' then htp.p('');
when QUERY_R.QUERY_HEADER like 'col4' then
    htp.p('</tr>
    <tr>
    <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
    FOR record IN QUERY_Q
        LOOP
              htp.p(record.col4);
        END LOOP;
when QUERY_R.QUERY_HEADER like 'col5' then
    htp.p('</tr>
    <tr>
    <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
    FOR record IN QUERY_Q
        LOOP
              htp.p(record.col5);
        END LOOP;
else htp.p('
    <td height="40px" bgcolor="E6E6D2" class="normal12px" align="center"><b>'||QUERY_R.HTML_TEXT||'</b></td>');
    FOR record IN QUERY_Q
        LOOP
            htp.p('<td width="40px" height="40px" bgcolor="E6E6D2" class="normal12px" align="center">'||record.col6||'</td>');
        END LOOP;
END CASE;
END LOOP;

Попробуйте это!Cya!

-

Отредактировано для объяснения: Вы используете регистр выражение , а не оператор .Заявления о делах всегда должны заканчиваться END CASE .

https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems004.htm

2 голосов
/ 24 сентября 2019

Поскольку выражение case ..when, которое не включено в оператор выбора, должно заканчиваться на end case;, которое должно быть заменено на end; непосредственно перед end loop; в нижней части кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...