[英]Case statement within select case statement
我正在嘗試創建一個case
語句,但我似乎在某種程度上弄亂了語法。 這是我到目前為止:
SELECT lp.assign_date, CASE WHEN lp.assign_date > '01-JAN-13'
THEN
(select count(*) > 0 THEN 'BAD' ELSE 'GOOD' END
FROM transaction_table
WHERE ACCOUNT = :V_ACCT
AND transaction_date < :V_TRAN_DATE
AND transaction_code = :V_TRAN_CODE
AND :V_TRAN_CODE IN (1,6,25)
AND attorney_id = :V_ATTY_ID)
ELSE
(SELECT
function_legal_chk(:V_ACCT, :V_TRAN_DATE)
FROM dual)
FROM legal_placement lp;
基本上它檢查分配的日期是否在1月之后,如果是,則執行下一個case statement
否則執行該function
。
這是我收到的錯誤:
ORA-00923: FROM keyword not found where expected
00923. 00000 - "FROM keyword not found where expected"
根據我對case statements
所做的知識和研究,我的語法似乎是正確的但我不確定case
中的case
是否可以完成。
任何幫助深表感謝。
這是正確的語法:
SELECT lp.assign_date,
(CASE WHEN lp.assign_date > '01-JAN-13'
THEN (select (CASE WHEN count(*) > 0 THEN 'BAD' ELSE 'GOOD' END)
FROM transaction_table
WHERE ACCOUNT = :V_ACCT
AND transaction_date < :V_TRAN_DATE
AND transaction_code = :V_TRAN_CODE
AND :V_TRAN_CODE IN (1,6,25)
AND attorney_id = :V_ATTY_ID
)
ELSE function_legal_chk(:V_ACCT, :V_TRAN_DATE)
END)
FROM legal_placement lp;
嵌套的case
語句必須完全在子查詢中(如上所示)或完全在外部。 你原來有一半。 此外,您不需要子查詢來調用select
的函數。 技術上還可以,但不必要。
肯定存在語法錯誤
select count(*) > 0 THEN 'BAD' ELSE 'GOOD' END
它應該是
select CASE WHEN count(*) > 0 THEN 'BAD' ELSE 'GOOD' END
另外,正如@GordonLindoff所指出的,你不需要第二個子查詢:
(SELECT
function_legal_chk(:V_ACCT, :V_TRAN_DATE)
FROM dual)
可以寫成
function_legal_chk(:V_ACCT, :V_TRAN_DATE)
最后,確保function_legal_chk
像第一個WHEN
表達式一樣返回Varchar
(或Char
),因為它們必須是同一類型的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.