首页 > 解决方案 > 嵌套在循环中的案例,PLS-00103:遇到符号“;” 预期以下情况之一时:案例

问题描述

我正在尝试构建一个水平表并通过显式游标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;

需要改变什么来解决这个错误?

标签: oracleplsql

解决方案


抱歉,现在不能测试它,但是如果你使用“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;

尝试这个!啊!

--

编辑解释:您使用的是 case expression,而不是statementcase 语句应该以END CASE结尾。

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


推荐阅读