Oracle PL/SQL 条件声明?

Oracle PL/SQL Conditional Declaration?

我们可以在pl/sql函数或过程中进行变量的条件声明吗?例如,我们可以做如下的事情吗:

CREATE OR REPLACE FUNCTION get_total_sales(
    in_year PLS_INTEGER
) 
RETURN NUMBER
IS
    IF condtion THEN
       variable_name_1 BINARY_FLOAT;
    ELSE
       variable_name_2 NUMBER;
    END;

BEGIN
   --- Function Logic
END;

如果满足 condition,我需要声明一个名为 variable_name_1 的变量,否则我不想声明它,而是需要声明一个名为 [=14= 的变量].

有可能 Oracle 10

示例:

SQL> CREATE OR REPLACE PROCEDURE test AS
  2    $IF $$test_on $THEN
  3      v1 BINARY_FLOAT;
  4    $ELSE
  5     v2 NUMBER;
  6    $END
  7    v boolean;
  8  BEGIN
  9   v := true;
 10  END test;
 11  /

Procedure created.

SQL> show errors
No errors.
SQL> --
SQL> ALTER PROCEDURE test COMPILE PLSQL_CCFLAGS = 'test_on:TRUE' REUSE SETTINGS;

Procedure altered.

SQL> --
SQL> BEGIN
  2  
  3    DBMS_PREPROCESSOR.print_post_processed_source (
  4      object_type => 'PROCEDURE',
  5      schema_name => 'SYSTEM',
  6      object_name => 'TEST');
  7  END;
  8  /
PROCEDURE test AS
v1 BINARY_FLOAT;
v boolean;
BEGIN
v := true;
END test;

PL/SQL procedure successfully completed.

SQL> show errors
No errors.
SQL> --
SQL> ALTER PROCEDURE test COMPILE PLSQL_CCFLAGS = 'test_on:FALSE' REUSE SETTINGS;

Procedure altered.

SQL> --
SQL> BEGIN
  2  
  3    DBMS_PREPROCESSOR.print_post_processed_source (
  4      object_type => 'PROCEDURE',
  5      schema_name => 'SYSTEM',
  6      object_name => 'TEST');
  7  END;
  8  /
PROCEDURE test AS
v2 NUMBER;
v boolean;
BEGIN
v := true;
END test;

PL/SQL procedure successfully completed.

SQL>