oracle - Oracle 12cr2 编译指示已弃用
问题描述
我们正在尝试清理我们的 PLSQL 代码库,因为它分散在可能不同的模式中,并且希望使用该PRAGMA DEPRECATE
功能来识别正在使用这些 UDF/Procs 的区域,以便使用来自我们集中模式的 UDF/Procs 更新它们。但是,当我重新编译使用已弃用函数的视图时,我没有收到任何形式的视图警告。
在包中具有已成功弃用的功能。
[Warning] PLW-06019 (13: 5): PLW-06019: entity FunctionName is deprecated
我已启用 PLSQL 警告。
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:(6019,6020,6021,6022)';
CREATE OR REPLACE PACKAGE schemaName.PackageName
AS
FUNCTION FunctionName (p_NumIn NUMBER) RETURN VARCHAR2;
PRAGMA DEPRECATE(FunctionName);
END schemaName.PackageName;
CREATE OR REPLACE FORCE VIEW schemaName.ViewName
(
FunctionColumnName
)
BEQUEATH DEFINER
AS
SELECT DISTINCT
schemaName.FunctionName (ColumnNameNumVal)
FROM TableName
WHERE
TableName.ColumnNameInd IS NULL;
我预计当我编译视图时会出现编译错误,表明选择语句中使用的函数已被弃用。没有提供错误。
解决方案
PLSQL_WARNINGS 仅适用于 PL/SQL 程序单元。这些在文档中定义为
PL/SQL 匿名块
FUNCTION
LIBRARY
PACKAGE
PACKAGE BODY
PROCEDURE
TRIGGER
TYPE
TYPE BODY
该列表不包括视图,唉,因为视图是 SQL 而不是 PL/SQL。我同意如果将弃用警告传播到 Views 会很整洁(并且对于列由 Types 构建的表也有类似的空白)。但我怀疑 Oracle 决定更改 SQL 编译器以检查 PLSQL_WARNINGS 所涉及的努力大大超过了潜在的好处(编写依赖于用户定义函数的视图的 Oracle 客户的百分比?使用 deprecation pragma 的客户的百分比?)。
推荐阅读
- c# - libVLCSharp 无法创建 MediaList
- python - 我想将excel文件数据导入django数据库表,如何解决以下错误?
- java - 如何在其他按钮单击时获得隐形按钮
- oracle - 在 Oracle Apex 18.1 中,交互式网格不显示 HTML 表达式列
- java - Converting a List of POJO into List of some other POJO in Java Stream
- python - 如何使用do/while?
- php - 清理恶意代码,同时允许一些 HTML(在持久化到 DB 之前)
- wpf - 如何让多个 ItemsControl 了解彼此的 z-index?WPF
- python-3.x - Keras 图层特征标签
- vue.js - vuetify 更改选项卡事件