oracle – PL / SQL评估订单

前端之家收集整理的这篇文章主要介绍了oracle – PL / SQL评估订单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你好.考虑以下:

sql> DECLARE
  2     b1   BOOLEAN;
  3     b2   BOOLEAN;
  4     FUNCTION checkit RETURN BOOLEAN IS
  5     BEGIN
  6        dbms_output.put_line('inside checkit');
  7        RETURN TRUE;
  8     END checkit;
  9  
 10     PROCEDURE outp(n VARCHAR2,p BOOLEAN) IS
 11     BEGIN
 12        IF p THEN
 13           dbms_output.put_line(n||' is true');
 14        ELSE
 15           dbms_output.put_line(n||' is false');
 16        END IF;
 17     END;
 18  BEGIN
 19     b1 := TRUE OR checkit;
 20     outp('b1',b1);
 21     b2 := checkit OR TRUE;
 22     outp('b2',b2);
 23  END;
 24  /

b1 is true
inside checkit
b2 is true

PL/sql procedure successfully completed

sql>

请注意,OR语句的结果是依赖于顺序的.如果我先放置函数调用,则无论其他术语的值如何,都会执行该函数.从左到右计算OR语句,直到获得TRUE为止,此时处理停止,结果为TRUE.

我的问题是,这是我可以依赖的东西吗?或者,这种行为是否会在PL / sql的未来版本中发生变化?如果它可以改变,有没有办法强制我可以依赖的函数被评估(不创建另一个变量并使用单独的赋值语句)?

解决方法

是. PL / sql从左到右执行 short circuit evaluation个逻辑表达式.

猜你在找的Oracle相关文章