plsql - 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;
这里发生了什么?
我在用着:
- PL/SQL 开发者版本 13.0.6.1911(64 位)
- Oracle Database 18c 标准版 2 发行版 18.0.0.0.0
解决方案
似乎是数据库中的错误。我会尝试升级到 Oracle 19c 或将最新的补丁集应用到您的数据库。我能够在我的数据库(版本 19.6.0.0.0)中编译您的包而没有任何错误。
推荐阅读
- c - 如何以给定的顺序杀死 2 个子进程
- python - 如何使单词大写的第一个字母?
- html - 如何使用 SVG 作为按钮 HTML/CSS
- css - Material UI 将 iPad(768px 宽和 1024px 高)视为一个小屏幕
- ios - 如何允许用户在 iOS 中一次仅在一台设备上使用该应用程序?
- web-scraping - Apify - 如何使用动态“下一页”按钮抓取多个页面(请求队列)?
- javascript - 对 Shopify 将客户发送到您指定的“应用 URL”的情况感到困惑
- github - GitHub Action - 如何在多个环境中部署发布?
- perl - 传递给函数后取消引用 perl 对象数组
- javascript - 在Javascript中循环遍历具有不同签名的函数数组的最佳实践?