簡體   English   中英

PLSQL 案例陳述比較兩列

[英]PLSQL Case Statement Comparing Two Columns

作為 PL/SQL 腳本的一部分,我正在努力處理 case 語句。

要求是我們有一個 ETL 作業,它運行將單行加載到帶有結果的表中。 此作業為不同的段返回兩列,每列將讀取通過或失敗。 這些列的結果通過電子郵件發送給負責此數據的團隊。 因此,如果他們都讀“通過”,他們會得到 email 表示一切正常。 如果一列顯示“失敗”,他們會收到 email 表示他們需要檢查數據。

當我測試這個腳本時,它根本不起作用,要么報告 SQL 命令沒有正確結束,要么拋出大量 PL/SQL 錯誤。 因為表中會有多行數據,所以兩個 select 子查詢每個都查找最新的行,因此 MAX(LOAD_KEY) 部分。

我讓這件事變得過於復雜了嗎? 我是不是想多了?

whenever sqlerror exit failure rollback
--
connect / as sysdba
set serverout on size 1000000
--set echo on
--
alter session set current_schema = &2;
--
--
-- executing function
--
DECLARE
  RetVal  Number;
--
--
-- Retrieve latest outcome records

--
BEGIN
 select case 
    when (SELECT T4_VALIDATION_OUTCOME 
 FROM TABLE 
 WHERE LOAD_KEY = (select MAX(LOAD_KEY) from TABLE)) = 'Pass'
    AND (SELECT T7_VALIDATION_OUTCOME 
 FROM TABLE 
 WHERE LOAD_KEY = (select MAX(LOAD_KEY) from TABLE)) = 'Pass'
    THEN 0
    ELSE 1
    into RetVal
  
 FROM TABLE;
    

--
if RetVal = 0 then
   dbms_output.put_line('Pass');   -- T4/T7 Reconciled

ELSE
   dbms_output.put_line('Fail');  -- Either T4 or T7 not reconciled

END IF;
--
END;
/
exit ```

我認為這個查詢是你想要的更簡單的版本。

select 
    CASE 
    WHEN T4_VALIDATION_OUTCOME = 'Pass'
        AND T7_VALIDATION_OUTCOME = 'Pass'
    THEN 0
    ELSE 1 
    END into RetVal
FROM TABLE
WHERE LOAD_KEY = (select MAX(LOAD_KEY) from TABLE);

我假設 LOAD_KEY 是一個唯一列 - 否則這可能 select 不止一行,這會引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM