神秘的 ORA-06553:PLS-103

Posted

技术标签:

【中文标题】神秘的 ORA-06553:PLS-103【英文标题】:Mysterious ORA-06553: PLS-103 【发布时间】:2015-12-03 09:20:50 【问题描述】:

我在处理 PLSQL 包时遇到了一个非常奇怪的问题。

我们在 PRODUCTION 和 TEST 两个环境中拥有相同的包和主体。 PRODUCTION 上的编译没有问题,但在 TEST 上会抛出此错误

Error: 
ORA-06553: PLS-103: Encountered the symbol "ALTERNATIV_NAME" when expecting one of the following:
     <an identifier> <a double-quoted delimited-identifier> 
ORA-06553: PLS-112: end-of-line in quoted identifier".

我已将与正文相同的包结构从 PRODUCTION 复制到 TEST 数据库,但我仍然得到相同的结果。正文抛出上述错误。

我无法理解“ALTERNATIV_NAME”是什么,非常感谢任何帮助。

【问题讨论】:

如何在测试环境和生产环境中编译代码。您是否为此使用 sql plus? 尝试设置sqlbl;如果您使用 sql plus 进行部署,请尝试部署代码 在您的包中搜索文本 ALTERNATIVE_NAME。在生产环境中可能有一个具有该名称的对象,但它不是在测试环境中创建的 @pablomatico 我正在使用sql开发工具编译包右键-->编译。然后我得到这个错误。很奇怪,同一个包(PRODUCTION)编译时没有任何错误。 TEST 上的那个给出了这个奇怪的错误。以下查询没有给出任何输出。 select * from user_source where upper(text) like ('%ALTERNATIV_NAME%'); select * from user_tab_cols where upper(column_name) like ('%ALTERNATIV_NAME%'); select * from user_objects where upper(OBJECT_NAME) like '%ALTERNATIV_NAME%';该软件包也没有任何带有“ALTERNATIV_NAME”的内容 ORA-06553: PLS-112: end-of-line in quoted identifier"似乎有一些引用错误的文字 【参考方案1】:

错误是语法错误。源代码中有一些东西破坏了编译。错误消息应包含行号,它将指向您要查看的位置。

“我的代码在环境 A 中运行,但在环境 B 中失败”形式的问题实际上是我们无法回答的。即使您发布了您的代码,我们仍有可能无法提供帮助,因为最可能的原因是两个环境之间存在一些差异,显然我们无权访问它们。

好消息是,您确实可以访问您的两个环境,因此您可以找出两者之间的不同之处。例如,一种可能的解释是脚本中的非打印字符,它在一种环境中被忽略,但在另一种环境中由于它们位于不同的操作系统上而被忽略。

顺便说一句,这表明您在部署过程中存在问题。您不应该在 PRODUCTION 中有任何未在 TEST 中成功运行的内容。

【讨论】:

【参考方案2】:

我知道已经晚了,但也许可以帮助别人。

我有同样的问题,似乎在 PL/SQL 代码中,我引用了一个列

在视图中,

当我在 sql developer editor 中浏览视图时,列名跨越了两行!!!...

将它放在一行中解决了我的问题。

【讨论】:

以上是关于神秘的 ORA-06553:PLS-103的主要内容,如果未能解决你的问题,请参考以下文章

ora-06553 pls-306 调用“ogc_x”时参数的数量或类型错误

当我调用该过程时,它给了我错误:ORA-06553: PLS-306: wrong number or types of arguments in call to phone_info

动态执行立即查询的问题

Oracle:如何调用重载过程?

使用 Mybatis 将布尔参数传递给存储过程

了解神秘的 Oracle JDBC 错误 - ORA-00911:无效字符