Oracle 将PLSQL过程/函数标记为已弃用

Oracle 将PLSQL过程/函数标记为已弃用,oracle,plsql,Oracle,Plsql,一些编程工具,如C#或Java,可能会将过程/函数标记为已弃用。但Oracle PLSQL并没有为此提供内置功能。我想知道是否有其他方法支持此功能 我希望它们显示为“关于任何正在编译的PL/SQL代码的PL/SQL编译器警告” Oracle和PL/SQL语言不支持此函数。您必须开发一种框架,在执行开始时检查变量,以确定代码是否贬值,但这一切都必须由开发团队手动处理这只是Oracle尚未包含的功能。我们有一个基于的自定义解决方案 无论何时编译–创建或替换–PL/SQL对象,都会触发create D

一些编程工具,如C#或Java,可能会将过程/函数标记为已弃用。但Oracle PLSQL并没有为此提供内置功能。我想知道是否有其他方法支持此功能

我希望它们显示为“关于任何正在编译的PL/SQL代码的PL/SQL编译器警告”


Oracle和PL/SQL语言不支持此函数。您必须开发一种框架,在执行开始时检查变量,以确定代码是否贬值,但这一切都必须由开发团队手动处理这只是Oracle尚未包含的功能。

我们有一个基于的自定义解决方案

无论何时编译–创建或替换–PL/SQL对象,都会触发create DDL事件,我们可以使用自己的触发器截获该事件。此时,我们可以使用各种信息将新记录插入PLSQL_归档表

整个过程如下

  • 触发器收集有关已编译对象的信息(关键字) 在评论中)。其中一个关键字是头方法中的
    已弃用
    (默认值:
    false
  • 然后触发器分析所使用的方法并检查是否已弃用。如果 该方法已过时,然后存储在我们的
    警告\u表中
  • 为了显示警告(棘手的部分),我们重写了视图
    用户错误
    与我们的
    警告表合并
现在,在编译对象时,我们得到了一条有用的消息:

OPLW-00001:SomeDeprecatedMethod方法已弃用


注意:很抱歉,我无法共享源代码,因为这是一个内部开发。

在Oracle 12.2版中,有一个新的
pragma

pragma deprecate ( deprecated_thing, 'Message to other developers' );
。。。其中
不推荐的\u thing
是任何PL/SQL标识符。以下内容可能会被弃用:

  • 子程序
  • 包裹
  • 变数
  • 常数
  • 类型
  • 亚型
  • 例外情况
  • 光标
例如:

CREATE OR REPLACE PACKAGE old_package AS
PRAGMA DEPRECATE(old_package , ’Package old_package has been deprecated in favor of new_package’);
    PROCEDURE p1;
    PROCEDURE p2;
END old_package;
任何试图编译使用您不推荐的内容的东西的人都将收到PLW-6019到PLW-6022范围内的PL/SQL警告

您可以按如下方式启用这些警告,以便在尝试编译代码时看到它们:

alter session set plsql_warnings = 'enable:(6019,6020,6021,6022)';
或者,您可以将会话设置为将这些警告视为错误:

alter session set plsql_warnings = 'error:6020';
或者,您可以将对象本身设置为使任何使用它的人获得错误:

alter package <package with deprecated stuff> compile plsql_warnings = 'error:6020' reuse settings;
alter package compile plsql\u warnings='error:6020'重用设置;

我对C和Java都不熟悉。请您澄清一下,当PL/SQL子例程被标记为已弃用时,您预计会发生什么情况。您是否遇到过此oracle论坛线程?对于另一个pragma来说,这可能是一个好主意:“pragma不推荐proc_name[msg]”。可选消息可能类似于“改用alt_proc_name”。听起来很合理。发布到。Oracle在12.2版中增加了对此的支持。我添加了一个带有详细信息的答案。编译代码时不执行dbms_输出。只有在执行方法时,put_行才“可见”。问题是“编译器警告任何正在编译的PL/SQL代码”。是的,当然,一切都清楚。DDL触发器将是一种方法。干杯;)
alter session set plsql_warnings = 'error:6020';
alter package <package with deprecated stuff> compile plsql_warnings = 'error:6020' reuse settings;