所有你需要的是
g_suppress_all_xlog BOOLEAN := fnc_Suppress();
不要将其设置为NULL
显式;如果你什么都不说,NULL
无论如何都会这样。
SQL> create or replace package pkg_Test as
2 procedure p_test;
3 g_suppress_all_xlog boolean;
4 end;
5 /
Package created.
SQL> create or replace package body pkg_Test as
2 procedure p_test is
3 begin
4 dbms_output.put_line('Variable''s value = ' ||
5 case when g_suppress_all_xlog then 'true'
6 when not g_suppress_all_xlog then 'false'
7 else 'null'
8 end);
9 end;
10 end;
11 /
Package body created.
SQL> exec pkg_test.p_test;
Variable's value = null
PL/SQL procedure successfully completed.
SQL>
fnc_suppress
不能是您声明此函数的同一包的一部分,因此 - 它必须是独立函数或另一个包的一部分。
SQL> create or replace package pkg_Test as
2 function fnc_suppress_in_pkg return boolean;
3 procedure p_test;
4 g_suppress_all_xlog boolean := fnc_suppress_in_pkg();
5 end;
6 /
Warning: Package created with compilation errors.
SQL> show err
Errors for PACKAGE PKG_TEST:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/23 PL/SQL: Declaration ignored
4/23 PLS-00492: variable or constant initialization may not refer to
functions declared in the same package
SQL>
最后:
SQL> create or replace function fnc_suppress return boolean
2 is
3 begin
4 return true;
5 end;
6 /
Function created.
SQL> create or replace package pkg_Test as
2 procedure p_test;
3 g_suppress_all_xlog boolean := fnc_suppress;
4 end;
5 /
Package created.
SQL> create or replace package body pkg_Test as
2 procedure p_test is
3 begin
4 dbms_output.put_line(case when g_suppress_all_xlog then 'true' else 'false' end);
5 end;
6 end;
7 /
Package body created.
SQL> exec pkg_test.p_test;
true
PL/SQL procedure successfully completed.
SQL>