Oracle Pl/Sql Ora 和 Pls 异常

Posted

技术标签:

【中文标题】Oracle Pl/Sql Ora 和 Pls 异常【英文标题】:Oracle Pl/Sql Ora and Pls exception 【发布时间】:2013-08-22 16:50:30 【问题描述】:

oracle pl/sql 中的 Ora-XXXXX 和 PLS-XXXXX 异常之间的根本区别是什么。据我了解,ORA 与数据库错误有关,PLS 用于编程错误,有人可以对此主题有所了解。提前致谢!

【问题讨论】:

【参考方案1】:

文档中似乎没有明确解释各种错误消息前缀的含义。它们在错误消息手册中进行了分组,但并没有真正说明每个组与什么相关 - 尽管您通常可以从消息本身中找出答案。

但你大体上是对的;至少 PLS 错误与 PL/SQL 有关。 ORA 错误涵盖范围很广,其中许多可能是由于“编程”错误造成的,具体取决于您如何定义。

error messages introducton 说:

所有显示的消息都以文本为前缀,指示哪个 程序发出消息。例如,前缀“ORA”表明 该消息是由 Oracle 产品生成的。

由于这是Oracle文档,说错误是由Oracle产品产生的并没有增加太多,非ORA代码也来自Oracle产品。

SQL*Plus 用户指南includes a slightly more relevant summary:

如果错误是以字母“ORA”开头的编号错误, 在 Oracle 数据库错误中查找 Oracle 数据库消息 消息指南或特定于平台的 Oracle 文档 为您的操作系统提供。

如果错误是以字母“PLS”开头的编号错误, 在 Oracle Database PL/SQL 中查找 Oracle Database 消息 语言参考。

...虽然 PLS 错误不在单独的文档中,所以看起来像一个文档错误。主要的error documentation 包括核心 ORA 错误和来自特定产品的许多其他前缀,包括 PLS 错误,并且还指出“消息特定于一种产品,并记录在该产品的手册中”。

如果您返回Oracle 9i error messages,您可以看到前缀含义的描述 - 根据该说明,PLS 是“PL/SQL 和 FIPS 消息”。它不在以后的版本中——也许产品之间的界限太模糊以至于没有意义。我怀疑这很大程度上取决于哪个小组负责将消息分配给产品的代码,并且在某种程度上可能具有历史意义,即产品被收购并适应 Oracle 产品组合(因为我相信 PL/SQL 本身就是最初的) .

oerr 工具的用法声明将前缀称为“设施”,这也没有多大帮助。

如果您看到 PLS 错误,那么它甚至不必来自您编写的 PL/SQL 代码,或者来自 PL/SQL 块。您可以从 SQL 调用一个可能会出现 PLS 错误的函数,因为它们(通常)是在 PL/SQL 中实现的。并且在编译 PL/SQL 时会出现 ORA 错误。

所以我不确定区别是否完全清楚,但它也不是很有用。无论您的错误有哪个前缀,您都可以在错误消息手册中查找它,了解它的含义以及如何解决它

【讨论】:

我知道您是说主要错误文档中没有明显的区别,而是通过拆分来区分。只是遗憾的是它没有在顶部告诉你他们通常指的是什么...... 感谢@Ben,我试图澄清和扩展一点。这主要是我的意思。 这是对文档的批评,而不是您的出色回答@Alex!我早些时候看到了这一点,并认为这不值得;我对您设法从 Oracle 中挤出如此多关于该主题的信息印象深刻。

以上是关于Oracle Pl/Sql Ora 和 Pls 异常的主要内容,如果未能解决你的问题,请参考以下文章

条件 old 不等于 new 的 Oracle 触发器以错误 PLS-00049、PL/SQL: ORA-00933 结束

oracle - PLS-00103 & ORA -06550 关于程序

我用PL/SQL-Developer登录oracle时出现 ORA-12560:TNS:协议适配器错误怎么办?急!!!!!

ORA-06550:第 1 行,第 13 列:PLS-00382:表达式类型错误 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“PAYMENT_UPDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

Oracle 存储过程不工作 PLS-00306