条件编译 PL/SQL

app*_*pes 2 oracle plsql plsqldeveloper

有人可以解释一下 PL/SQL 中条件编译的概念吗?我已经研究过,但不太明白使用它背后的原因以及它的实际作用。举个例子就太好了!

另外,我想了解更多有关条件编译控制令牌的信息。PL/SQL 中的令牌是什么?

预先感谢您的帮助。

Sen*_*nel 5

最好的资源是 Oracle 自己的文档(11g12c

然而,条件编译的概念是,它可以用于根据编译时的某些静态条件以不同的方式编译代码。

例如,您最初可能在 Oracle 的一个版本(例如 Oracle 11g)中编写一段代码。开发不断推进,也许您会在 Oracle 12c 中发现新功能可以更好地完成同样的事情。您可以使用条件编译在 11g 实例中编译原始代码,但只能在 12c 和更新的数据库中编译较新的 12c 优化代码。例如:

begin
  $IF DBMS_DB_VERSION.VERSION < 12 $THEN
    -- Do your old school stuff here
  $ELSE
    -- Do the new stuff here
  $END
end;
Run Code Online (Sandbox Code Playgroud)

DBMS_DB_VERSION包包含静态常量,例如VERSION上面使用的常量。您可以在条件编译布尔表达式中使用任何包中定义的任何常量PLS_INTEGER或值。BOOLEAN这意味着您甚至可以将条件编译基于您自己代码的特定版本,前提是您在包规范中包含常量修订号或常量布尔标志。例如:

begin
  $IF MY_PACKAGE.REVISION < 2 $THEN
    -- Use the legacy code here
  $ELSIF MY_PACKAGE.REVISION < 4 $THEN
    -- Use the newer code here
  $ELSE
    -- Use the latest code here
  $END
end;
Run Code Online (Sandbox Code Playgroud)