You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:45:03