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

Oracle PL/SQL—特定于一个数据库的条件编译,oracle,plsql,Oracle,Plsql,我有一个Oracle开发数据库,其中包含一些最终被复制到生产服务器的包。我正在寻找一种在包规范中使用条件编译的方法,该方法仅在这台开发服务器上为true,但在所有其他服务器上编译为false 我无法向生产服务器添加任何内容来完成此任务-没有新的全局变量/配置设置/过程/等等 那么有没有一种有效的方法 $IF {{development_server}} $THEN my_proc; $END 我不确定这是否正是你所追求的,但它应该给你一些东西: CREATE OR REPLACE PA

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

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

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

$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;