0

次のシナリオがあります。

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で何らかの方法でこれを行うことは可能ですか? それを行う 1 つの方法は、クエリを複製し、パラメーターの値に基づいて別のクエリを実行することですが、コードを複製したくありません。

4

1 に答える 1

3

私があなたの要件を理解しているように: パラメータの値が である場合は で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')
于 2013-04-23T19:48:43.977 に答える