簡體   English   中英

select case語句中的case語句

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

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