首页 > 解决方案 > validate_conversion 不在包中编译,而是作为独立过程编译

问题描述

当我尝试在 plsql 中使用 validate_conversion 时出现编译错误。

Error: PLS-00801: Interner Fehler [*** ASSERT at file pdz2.c, line 5361; The_Exp is null.; TEST__DBNAME__B__2920081[10, 3]]
Line: 10
Text: END;

有趣的是,只有在包中编译时才会出现此错误。MWE 是:

CREATE OR REPLACE PACKAGE test IS
  PROCEDURE my_VALIDATE_CONVERSION(asNbr VARCHAR2);
END test;
/
CREATE OR REPLACE PACKAGE BODY test IS
  PROCEDURE my_VALIDATE_CONVERSION(asNbr VARCHAR2) IS
  BEGIN
    CASE VALIDATE_CONVERSION(asNbr AS NUMBER, '999999D99', ' NLS_NUMERIC_CHARACTERS = '',.''')
      WHEN 1 THEN
        DBMS_OUTPUT.PUT_LINE('He');
      ELSE
        DBMS_OUTPUT.PUT_LINE('Cu');
    END CASE;
  END;
BEGIN
  NULL;
END test;
/

如果编译为独立程序my_VALIDATE_CONVERSION,它工作得很好。

CREATE OR REPLACE PROCEDURE my_VALIDATE_CONVERSION(asNbr VARCHAR2) IS
BEGIN
  CASE VALIDATE_CONVERSION(asNbr AS NUMBER, '999999D99', ' NLS_NUMERIC_CHARACTERS = '',.''')
    WHEN 1 THEN
      DBMS_OUTPUT.PUT_LINE('He');
    ELSE
      DBMS_OUTPUT.PUT_LINE('Cu');
  END CASE;
END;

这里发生了什么?

我在用着:

标签: plsql

解决方案


似乎是数据库中的错误。我会尝试升级到 Oracle 19c 或将最新的补丁集应用到您的数据库。我能够在我的数据库(版本 19.6.0.0.0)中编译您的包而没有任何错误。


推荐阅读