PLSQL 条件规则
PLSQL Conditional rules
需要条件规则:
IF
A then currency = ABC
B then currency = ABD
C then currency = ABE
NULL = Returns data from A, B and C but it's currency is ABC
为了实现这个逻辑,我尝试使用 3 个单独的 CASE 语句,但这似乎不起作用。任何帮助表示赞赏
我目前拥有的:
(尝试了一些变化)
CASE
WHEN '&SITE' IS 'A' THEN
COJ.CURRENCY_CODE IS 'ABC'
END A,
CASE
WHEN '&SITE' IS 'B' THEN
COJ.CURRENCY_CODE IS 'ABD'
END B,
CASE
WHEN '&SITE' IS NULL 'C' THEN
COJ.CURRENCY_CODE IS 'ABE'
END C,
对 if 语句使用 decode function,只有 B 和 C 产生的值与默认值不同:
decode(x, 'B', 'ABD', 'C', 'ABE','ABC')
您应该坚持使用 case
表达式:
(CASE WHEN '&SITE' = 'A' THEN 'ABC'
WHEN '&SITE' = 'B' THEN 'ABD'
WHEN '&SITE' = 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
或:
(CASE '&SITE' WHEN 'A' THEN 'ABC'
WHEN 'B' THEN 'ABD'
WHEN 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
CASE
是标准的 SQL 并且在所有数据库中都可用,大多数人发现它更清晰。 DECODE()
是在使用标准函数之前实施的定制 Oracle 代码。 CASE
在 Oracle 中已有 20 年了。
需要条件规则:
IF
A then currency = ABC
B then currency = ABD
C then currency = ABE
NULL = Returns data from A, B and C but it's currency is ABC
为了实现这个逻辑,我尝试使用 3 个单独的 CASE 语句,但这似乎不起作用。任何帮助表示赞赏
我目前拥有的:
(尝试了一些变化)
CASE
WHEN '&SITE' IS 'A' THEN
COJ.CURRENCY_CODE IS 'ABC'
END A,
CASE
WHEN '&SITE' IS 'B' THEN
COJ.CURRENCY_CODE IS 'ABD'
END B,
CASE
WHEN '&SITE' IS NULL 'C' THEN
COJ.CURRENCY_CODE IS 'ABE'
END C,
对 if 语句使用 decode function,只有 B 和 C 产生的值与默认值不同:
decode(x, 'B', 'ABD', 'C', 'ABE','ABC')
您应该坚持使用 case
表达式:
(CASE WHEN '&SITE' = 'A' THEN 'ABC'
WHEN '&SITE' = 'B' THEN 'ABD'
WHEN '&SITE' = 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
或:
(CASE '&SITE' WHEN 'A' THEN 'ABC'
WHEN 'B' THEN 'ABD'
WHEN 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
CASE
是标准的 SQL 并且在所有数据库中都可用,大多数人发现它更清晰。 DECODE()
是在使用标准函数之前实施的定制 Oracle 代码。 CASE
在 Oracle 中已有 20 年了。