首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle SQL查询中使用嵌套case条件的问题

在Oracle SQL查询中使用嵌套case条件的问题
EN

Stack Overflow用户
提问于 2013-03-20 19:17:34
回答 2查看 3.8K关注 0票数 0

我有一个场景,在中,我需要使用一个包来计算雇员的工资,如果有一些预付款,它会给我永久雇员的剩余工资,然后将计算出的值转换为使用另一个包的员工指定的货币。

我一直在做的事情是:

代码语言:javascript
复制
CASE
  WHEN ( ai.employee_type = 'PERMANENT' and ai.payment_status_flag='Y')
  THEN EMP_UTILS_PKG.get_pay_amount_remaining( ai.employee_id )
  ELSE ail.amount_remaining
END amount_remaining,
CASE
  WHEN ( ai.salary_currency_code = NVL(find_currency('EMP_COMMON_CURRENCY'),ai.EMP_CURRENCY_CODE))
  THEN CASE
             WHEN ( ai.employee_type = 'PERMANENT' and ai.payment_status_flag='Y')
                THEN EMP_UTILS_PKG.get_pay_amount_remaining( ai.employee_id )
             ELSE ail.amount_remaining
  END
  ELSE EMP_API.convert_closest_amount_sql( x_from_currency => ai.EMP_CURRENCY_CODE ,x_to_currency => find_currency('EMP_COMMON_CURRENCY') ,x_amount =>( CASE
             WHEN ( ai.employee_type = 'PERMANENT' and ai.payment_status_flag='Y')
                THEN EMP_UTILS_PKG.get_pay_amount_remaining( ai.employee_id )
             ELSE ail.amount_remaining
END) ,x_max_roll_days => -1)
END EMP_CONVERTED_AMOUNT_REMAINING, 

在我的查询中,我已经重复了3次以下条件:

代码语言:javascript
复制
WHEN ( ai.employee_type = 'PERMANENT' and ai.payment_status_flag='Y')
   THEN EMP_UTILS_PKG.get_pay_amount_remaining( ai.employee_id )
   ELSE ail.amount_remaining

有没有一种更简单的方法,我们能避免像这样的重复代码吗?

EN

回答 2

Stack Overflow用户

发布于 2013-03-20 19:22:59

您可以在FROM子句中使用内联视图来简化这一过程。在您的活动代码中正确使用连接。

代码语言:javascript
复制
SELECT amount_remaining
     , CASE
          WHEN ai.salary_currency_code = NVL(find_currency('EMP_COMMON_CURRENCY')
                                            ,ai.EMP_CURRENCY_CODE)
               THEN amount_remaining

          ELSE EMP_API.convert_closest_amount_sql(
                   x_from_currency => ai.EMP_CURRENCY_CODE
                  ,x_to_currency => find_currency('EMP_COMMON_CURRENCY')
                  ,x_amount => amount_remaining
                  ,x_max_roll_days => -1)
        END EMP_CONVERTED_AMOUNT_REMAINING,
FROM (SELECT CASE
               WHEN ai.employee_type = 'PERMANENT'
                AND ai.payment_status_flag='Y'
                    THEN EMP_UTILS_PKG.get_pay_amount_remaining( ai.employee_id )
               ELSE ail.amount_remaining
             END amount_remaining
        FROM table_name);
票数 0
EN

Stack Overflow用户

发布于 2013-03-20 19:36:24

您已经使用了函数EMP_UTILS_PKG.get_pay_amount_remaining,所以为什么不创建一个封装逻辑的PL/SQL函数,并在多个地方调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15522022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档