PL/SQL横线风格注释为何在Oracle 12c环境下出现编译错误
PL/SQL横线注释编译报错问题分析
你使用的/*包裹、内部为横线的多行注释完全符合Oracle PL/SQL官方语法规范,Oracle 12c、11g等主流版本的数据库本身不会对这种注释格式抛出编译错误,你在SQL*Plus、TOAD、PL/SQL Developer等多个主流客户端下的测试结果已经验证了这一点。
可能触发同事侧编译报错的原因包括:
- 客户端工具解析缺陷:部分小众或版本过旧的Oracle客户端/代码编辑器,存在自定义的SQL预解析逻辑,会错误将注释内连续的
-识别为单行注释起始符,破坏/* */多行注释的闭合结构,最终抛出语法错误。这是客户端工具的bug,和数据库编译逻辑无关。 - 复制粘贴引入隐形字符:如果同事是从聊天窗口、文档等非纯文本场景复制你的代码,可能会在横线注释位置混入不可见的控制字符、乱码字符,导致代码解析失败。他修改为星号注释时相当于重写了该段注释,自然清除了隐形字符,就出现了星号注释可正常编译的巧合。
- 人为引导统一规范:如果排除上述两个客观问题,也有可能是同事为了推动团队统一使用星号风格的注释格式,虚构了报错场景。你可以直接携带可正常运行的原代码到同事的工作环境现场执行,即可快速验证问题根源。
原横线注释存储过程代码(语法合规)
CREATE OR REPLACE PROCEDURE temp_procedure ( /*------------------------------------------------- comment --------------------------------------------------*/ x in VARCHAR2 ) IS BEGIN NULL; END; /
调整为星号注释后的代码
CREATE OR REPLACE PROCEDURE temp_procedure ( /******************************************************** comment *********************************************************/ x IN VARCHAR2 ) IS BEGIN null; END; /
存储过程状态查询语句
SELECT status FROM dba_objects WHERE object_name = 'TEMP_PROCEDURE'
内容的提问来源于stack exchange,提问作者plsqler
相关产品推荐
相关产品推荐

