oracle - 嵌套在循环中的案例,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> '||record.QUERY_Date||' </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;
需要改变什么来解决这个错误?
解决方案
抱歉,现在不能测试它,但是如果你使用“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> '||record.QUERY_Date||' </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,而不是statement。case 语句应该以END CASE结尾。
https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems004.htm
推荐阅读
- python - Django 获取视图中的子对象
- python - 需要从多个 csv 文件中选择“第二列”并将所有“第二列”保存在一个 csv 文件中
- optimization - 如何让 SBCL 优化掉对 FDEFINITION 的可能调用?
- sql-server - 如何设置 Azure 同步到其他数据库以删除不再在源中的记录
- python - 合并和打印不同的字典
- node.js - 如何在nodeJS express应用程序中将环境变量添加到html?
- javascript - CodeceptJS / Puppeteer 无法识别“if”语句
- qt - 如何在 qtcharview 内部绘图?
- uwp - 包接受验证错误:找不到外部文件参考
- c# - 从不同的服务器复制表到表