鉴于v_ssn_ind INTEGER := IF TRIM(p_ssn) IS NULL THEN 0 ELSE 1 END IF;
Oracle PL/SQL可以将整数作为布尔值计算吗?
我知道我能做到这一点:IF v_ssn_ind=1 THEN…
但我可以做的短路计算,即:IF v_ssn_ind THEN…
?
鉴于v_ssn_ind INTEGER := IF TRIM(p_ssn) IS NULL THEN 0 ELSE 1 END IF;
Oracle PL/SQL可以将整数作为布尔值计算吗?
我知道我能做到这一点:IF v_ssn_ind=1 THEN…
但我可以做的短路计算,即:IF v_ssn_ind THEN…
?
首先,你所说的与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条件更快。
好吧,我会编辑标题文章和问题 - 比“短路评估”更合适吗? –
我不鼓励你把任何逻辑放到一个声明块中,我认为它使代码不太清晰。您可以使用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;
...
个人而言,我期望一个名为“_ind”的变量指向某种索引。也许将这个变量重命名为'v_ssn_is_not_null'会更有意义。 –
你是对的,它会给变量的名称带来更多的含义。 – foobarbaz
@JeffreyKemp:'_ind'是指标的简称;在我的第一份工作中,它是布尔变量的建议附录。 –
而且,对于加分,是任何更快或更慢? –
除非'v_ssn_ind'被声明为布尔值,否则表达式'IF v_ssn_ind THEN'没有意义(如果我没有弄错,将不会编译)。 –