某些编程工具(如C#或Java)可以将过程/函数标记为已弃用。但Oracle PLSQL没有内置的功能。我想知道还有另一种方法来支持这个功能。
我希望它们能够显示" PL / SQL编译器警告任何正在编译的PL / SQL代码。"。
96/43 PLW-06005: inlining of call of procedure 'TEST' was done
答案 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表中。
整个过程如下
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');