【问题标题】:How to find the error causing ora-06575?如何找到导致 ora-06575 的错误?
【发布时间】:2012-04-05 00:34:03
【问题描述】:

最近写了一个oracle函数,经常出现ora-06575这个错误。 通常是因为赋值时缺少冒号,例如:z = 5 (vs. z := 5) 或错过的';'在语句的末尾。

无论如何,我能够创建该函数,但它在执行过程中失败并出现该错误,并且没有提示问题出在哪里(除了它在函数中)。

我在 MSSQL 和 Sybase 中编写了相同的函数,这两个函数实际上都试图将我指向任何错误的位置。所以我认为我在 Oracle 中做错了 - 它不能只告诉我“有错误”。

在 oracle 中我有这样的声明:

CREATE OR REPLACE
  FUNCTION...

我正在通过选择函数并按 F9 来编译 SQL 开发人员提供的函数。 当我选择一个执行该函数的语句并按 F9 时,我得到 ora-06575 错误。

如果我按 F5 编译函数,它会告诉我:

ORA-24344: success with compilation error

  Compiled.

于是我找到了这个网站:http://www.dba-oracle.com/t_ora_24344_success_with_compilation_error.htm 但我似乎无法运行“显示错误”。当我运行它时,我看不到任何输出。

只能在 sqlplus 中使用吗?我正在使用 SQL 开发人员,我更愿意坚持使用 SQL 开发人员。 有什么我想念的吗?我想让它告诉我错误在哪里。

【问题讨论】:

    标签: oracle plsql oracle-sqldeveloper


    【解决方案1】:

    SHOW ERRORS 也可以在 SQL*Developer 中工作(至少在我最近使用的版本中,当然是 3.1)。您在评论中提到您以 SYS 身份连接,所以我真的希望您在另一个模式中显式创建您的函数 - 无论如何我都会避免这种情况,以防您有一天忘记并修改任何预建的架构(SYS、SYSTEM 等)是个坏主意。如果是这样,您还需要在错误对象前面加上模式:

    create or replace function my_schema.x return number is
    begin
        return sysdate;
    end;
    /
    show errors my_schema.x
    

    当作为脚本运行 (F5) 时,这表示:

    FUNCTION X compiled
    Warning: execution completed with warning
    3/8    PLS-00382: expression is of wrong type
    3/1    PL/SQL: Statement ignored
    

    输出的前两行来自函数编译,后两行来自show errors。您也可以使用 F9 分别运行这两个语句,以查看相同的结果。

    但我不确定您是如何获得ORA-24344 的,所以您可能使用的是早期版本;这可能行不通。无论您的客户如何,A.B.Cade 的解决方案都适用。

    【讨论】:

    • 谢谢你这么详细的解释,可惜我用的是1.5.5版本,要升级了。
    【解决方案2】:

    SHOW ERRORS 是一个 sql*plus 命令
    也可以查询USER_ERRORS视图

    SELECT line, position, text
    FROM user_errors
    WHERE name = '<<your_object_name>>'
    

    【讨论】:

    • 效果很好,谢谢。我实际上是作为 SYS/sysdba 连接的,所以使用 ALL_ERRORS 运行语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多