Все, что вам нужно, это
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>