Ash*_*ana 2 database oracle plsql stored-procedures conditional-compilation
我们可以在 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;
Run Code Online (Sandbox Code Playgroud)
如果condition满足,我需要声明一个名为的变量variable_name_1,如果不是,我不想声明它,而是需要声明一个名为variable_name_2.
从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.
Run Code Online (Sandbox Code Playgroud)
查询>
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |