PL / SQL中的一行IF条件

时间:2015-05-27 12:42:04

标签: oracle if-statement plsql

如果是pl / sql,可以写一行吗?我只是好奇。

我想写这个片段:

IF ( i.DECISAO_AT = 'S')
THEN 'PA'
ELSE 'I'
END IF;

我想知道是否可以将它写在一行中,就像java一样。像这样:

IF ( i.DECISAO_AT = 'S') ? 'PA' : 'I' ;

谢谢!

5 个答案:

答案 0 :(得分:8)

你可以像其他人一样在一行上写IF ... ELSE ... END IF;;但不,你不能按照你的建议做,并像“Java一样”写出来:

IF ( i.DECISAO_AT = 'S') ? 'PA' : 'I' ;

PL / SQL不理解Java ?:语法,并且没有自己的三元运算符。您只能使用what is described in the documentation。对于这个特定的陈述,最接近我认为你要问的是,case

CASE WHEN i.DECISAO_AT = 'S' THEN 'PA' ELSE 'I' END

或者可能是decode,正如xQbert已在评论中提出的那样。虽然不再是“IF”。

答案 1 :(得分:3)

如果代码在一行或多行中,PL/SQL执行代码没有问题。重要的是语法是正确的。

答案 2 :(得分:3)

您可以使用可以内联使用的DECODE语句: Oracle / PLSQL中DECODE函数的语法是:

DECODE( expression , search , result [, search , result]... [, default] )

答案 3 :(得分:2)

当然可以,但是当你需要调试时,如果进行多次测试,这将是一个痛苦。将其保存在单独的线路上,从而更容易阅读,调试,评论并且更容易(因此更便宜)进行维护。下一个工作的人会感谢你。

我读了一本书(我认为它是" C元素的风格")曾经:"提防聪明,聪明的杀戮")。保持简单易行。在您需要维护代码之后的代码。

答案 4 :(得分:0)

您可以将DECODE与SELECT INTO一起使用,如下所示。 “ my_var”将是一个声明为保留解码值的变量。

SELECT DECODE(i.DECISAO_AT, 'S', 'PA', 'I') INTO my_var FROM DUAL;