gpt4 book ai didi

oracle - PL/SQL - 特定于一个数据库的条件编译

转载 作者:行者123 更新时间:2023-12-04 01:56:36 25 4
gpt4 key购买 nike

我有一个 Oracle 开发数据库,​​其中有一些包最终被复制到生产服务器。我正在寻找一种在包规范中使用条件编译的方法,该方法仅在此开发服务器上为真,但在所有其他服务器上编译为假。

我无法向生产服务器添加任何内容来完成此操作 - 没有新的全局变量/配置设置/程序/等。

那么有没有一种有效的方法呢

$IF {{development_server}} $THEN
my_proc;
$END

最佳答案

我不确定这是否正是您所追求的,但它应该会给您一些有用的东西:

CREATE OR REPLACE PACKAGE my_app_state
AUTHID DEFINER
IS
c_in_production CONSTANT BOOLEAN := TRUE;
END;
/

CREATE OR REPLACE PROCEDURE test_app_state
AUTHID DEFINER
IS
PROCEDURE my_proc1
IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('1');
END;

PROCEDURE my_proc2
IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('2');
END;
BEGIN
$if my_app_state.c_in_production $then
my_proc1;
$else
my_proc2;
$end
end;
/

EXEC test_app_state

您还可以使用条件编译标志。如果它未定义,它只是默认为 NULL,因此默认的生产状态是“关闭”。

CREATE OR REPLACE PROCEDURE test_app_state
AUTHID DEFINER
IS
PROCEDURE my_proc1
IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('1');
END;

PROCEDURE my_proc2
IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('2');
END;
BEGIN
$if $$cc_in_dev $then
my_proc1;
$else
my_proc2;
$end
end;
/

关于oracle - PL/SQL - 特定于一个数据库的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50064436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com