2013-03-20 18 views
0

我有一個場景,我需要使用一個包來計算employeee工資,如果有一些預付款給了我永久僱員的工資,然後將計算出的值轉換爲員工使用其他軟件包指定的貨幣。在Oracle SQL查詢中使用嵌套大小寫條件的問題

如何我一直在做的是:

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 

是否有這種更簡單的方法,可避免重複碼喜歡這個?

回答

0

您可以使用FROM子句中的內聯視圖來簡化此操作。在您的實時代碼中正確使用連接。

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

我已經編輯它來添加缺少的行,你能告訴我,如果有一種方法可以避免重複代碼提到的問題。 – Chaitanya 2013-03-20 11:33:03

+0

已編輯。請檢查。 – Rachcha 2013-03-20 11:36:57

0

你已經使用功能EMP_UTILS_PKG.get_pay_amount_remaining爲什麼不創建一個封裝了邏輯並調用在你的多個地方一個PL/SQL函數。