簡體   English   中英

PL / SQL:有條件的地方

[英]PL/SQL: Conditional Where

我有以下情況:

CREATE OR REPLACE PROCEDURE GETINBOX
(
    inHasAttachments        IN int
)
AS

BEGIN

    SELECT M.MailId,
           M.SenderId,
           E.Emp_Name As "Sender",
           MI.RecipientId,
           M.Subject

    FROM MAIL M INNER JOIN MAILINBOX MI ON M.MailId = MI.MailId


    WHERE MI.RecipientId = '547' AND
          M.NotificationSelected = 'Y'

    IF inHasAttachments = '1' THEN
       AND M.Attachments = 'Y'
    END IF;


END GETINBOX;

是否可以根據參數的值向where子句添加條件?

    WHERE MI.RecipientId = '547' AND
          M.NotificationSelected = 'Y'

    IF inHasAttachments = '1' THEN
       AND M.Attachments = 'Y'
    END IF;

顯然這是不允許的,但是有可能在PL / SQL中以某種方式做到這一點嗎? 我知道一種方法是復制查詢並根據參數的值執行另一個查詢,但是我不想復制我的代碼。

據我了解,您的要求:如果參數inHasAttachments的值是1那么您想進一步通過M.Attachments = 'Y'進行過濾,如果它的值不是1那么您就不在乎M.Attachments 這是條件MI.RecipientId = '547' AND M.NotificationSelected = 'Y'

您可以這樣做:

SELECT M.MailId,
   M.SenderId,
   E.Emp_Name As "Sender",
   MI.RecipientId,
   M.Subject
FROM MAIL M INNER JOIN MAILINBOX MI ON M.MailId = MI.MailId
WHERE MI.RecipientId = '547' AND M.NotificationSelected = 'Y'
  AND (inHasAttachments <> '1' OR M.Attachments = 'Y')

暫無
暫無

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

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