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

时间:2015-09-24 11:52:59

标签: oracle plsql

某些编程工具(如C#或Java)可以将过程/函数标记为已弃用。但Oracle PLSQL没有内置的功能。我想知道还有另一种方法来支持这个功能。

我希望它们能够显示" PL / SQL编译器警告任何正在编译的PL / SQL代码。"。

96/43    PLW-06005: inlining of call of procedure 'TEST' was done

4 个答案:

答案 0 :(得分:6)

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

pragma deprecate ( deprecated_thing, 'Message to other developers' );

...其中deprecated_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;

答案 1 :(得分:1)

这不是Oracle和PL / SQL语言支持的功能。您必须开发一种框架,该框架将在执行开始时检查变量,以确定代码是否已折旧,但这些都必须由开发团队手动处理。 这根本不是Oracle提供的功能。

答案 2 :(得分:1)

我们有一个基于PL/SQL Source Code Control inside the database – After Compile trigger for automatic archiving的自定义解决方案。

  

每当我们编译 - 创建或替换 - PL / SQL对象时,都会触发CREATE DDL事件,我们可以使用自己的触发器拦截该事件。此时,我们可以使用各种信息将新记录插入到PLSQL_ARCHIVE表中。

整个过程如下

  • 触发器收集有关编译对象的信息(关键字 在评论中)。其中一个关键字是header方法中的deprecated (默认:false)。
  • 然后触发器分析使用的方法并检查是否弃用。如果 该方法已过时,然后存储在我们的warning_table
  • 要显示警告(棘手的部分),我们会重写视图 USER_ERRORS与我们的warning_table合并。

现在我们在编译对象时有一个有用的消息:

OPLW-00001: The method SomeDeprecatedMethod is deprecated

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

答案 3 :(得分:-1)

dbms_output.put_line('This function is deprecated');