Oracle PL / SQL可以将整数计算为布尔值吗?

时间:2013-08-23 17:22:41

标签: plsql oracle11g

给定v_ssn_ind INTEGER := IF TRIM(p_ssn) IS NULL THEN 0 ELSE 1 END IF;

我知道我可以这样做:IF v_ssn_ind=1 THEN…

但我可以进行短路评估,即:IF v_ssn_ind THEN…

2 个答案:

答案 0 :(得分:6)

首先,你所谈论的内容似乎与short-circuit evaluation没有任何关系。当像

这样的代码时,短路评估就会出现
IF( quick_condition AND slow_condition )
THEN
  <<do something>>
END IF;
当且仅当初始快速条件的计算结果为TRUE时,

才会计算第二个慢速条件。

其次,将值赋值给v_ssn_ind在语法上无效。

第三,不,你不能说

IF <<integer variable>>
THEN

因为这没有意义。什么值会评估为TRUE,哪些值会评估为FALSE?例如,如果0为FALSE且1为TRUE,那么17将转换为什么?

如果要声明某种指示符变量,通常使用BOOLEAN数据类型而不是整数是有意义的。如果使用布尔值,则可以执行

IF <<boolean variable>>
THEN

因为这消除了歧义。这不会比将= TRUE添加到您的IF条件更快。

答案 1 :(得分:0)

我不鼓励你将任何逻辑放入声明块中,在我看来它会使代码不那么清晰。

而是IF您可以使用CASE声明。

...
    v_ssn_ind INTEGER;
BEGIN
    v_ssn_ind := CASE TRIM(p_ssn) IS NULL WHEN TRUE THEN 0 ELSE 1 END;
...

但我个人会为BOOLEAN

选择v_ssn_ind类型
...
    v_ssn_ind BOOLEAN;
BEGIN
    v_ssn_ind := TRIM(p_ssn) IS NOT NULL;
...