[英]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.