で、パッケージを使用して従業員の給与を計算する必要があるシナリオがあります。これにより、前払いがある場合に正規従業員の残りの給与が得られ、計算された値が別のパッケージを使用して従業員によって指定された通貨に変換されます。
私がこれを行っている方法は次のとおりです。
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 回繰り返しました。
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
このためのより簡単なアプローチはありますか?このようなコードの繰り返しを避けることはできますか?