Oracle PL/SQL—特定于一个数据库的条件编译
我有一个Oracle开发数据库,其中包含一些最终被复制到生产服务器的包。我正在寻找一种在包规范中使用条件编译的方法,该方法仅在这台开发服务器上为true,但在所有其他服务器上编译为false 我无法向生产服务器添加任何内容来完成此任务-没有新的全局变量/配置设置/过程/等等 那么有没有一种有效的方法Oracle PL/SQL—特定于一个数据库的条件编译,oracle,plsql,Oracle,Plsql,我有一个Oracle开发数据库,其中包含一些最终被复制到生产服务器的包。我正在寻找一种在包规范中使用条件编译的方法,该方法仅在这台开发服务器上为true,但在所有其他服务器上编译为false 我无法向生产服务器添加任何内容来完成此任务-没有新的全局变量/配置设置/过程/等等 那么有没有一种有效的方法 $IF {{development_server}} $THEN my_proc; $END 我不确定这是否正是你所追求的,但它应该给你一些东西: CREATE OR REPLACE PA
$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,因此默认的生产状态为“off”
v$数据库中包含数据库名称。如果他们的名字不一样,这应该管用
SELECT NAME FROM v$database;
不幸的是,由于开发服务器被设置为镜像生产服务器,所以环境之间的情况是相同的。很荣幸PL/SQL主控器自己给出了回复-我目前使用的是与您在这里列出的非常类似的东西(引用schema.package.variable),但我的变量位于仅存在于开发服务器上的模式/包中,因此在生产服务器上编译包时会出现错误。一个包可以复制到几十个生产服务器,所以我不能在每个环境中都设置一个变量。如果有一种方法可以将变量包装为“If variable Not Existence/hits a exception,false”,那么我就可以开始工作了?在这种情况下,请使用条件编译标志。如果未定义,则默认为null。我将编辑我的解决方案以反映这一点。顺便说一句,我很荣幸你很荣幸。:-)ccflag正是我想要的,再次感谢您在PL/SQL社区中提供的帮助和所做的一切。
SELECT NAME FROM v$database;