Я хочу проверить имя пользователя по значению и вложенному запросу - PullRequest
0 голосов
/ 17 апреля 2019

В приведенном ниже коде я пытаюсь ограничить результаты либо wkf.email_address запрашивающей стороны, либо wkf.email_address покупателя

Однако я получаю BUYER_EMAIL, не действительный идентификатор.

довольно плохо знаком с SQL, так что я уверен, что это неправильный синтаксис.

Работает только по электронной почте запрашивающей стороны, т.е.

AND    WKF.EMAIL_ADDRESS = :xdo_user_name

вместо

AND    WKF.EMAIL_ADDRESS = :xdo_user_name OR BUYER_EMAIL  = :xdo_user_name

Это мой код

      SELECT DISTINCT APA.INVOICE_NUM,
                  APA.INVOICE_AMOUNT,
                  TO_CHAR (APA.INVOICE_DATE, 'DD/MM/YYYY') INVOICE_DATE,
                  SUP.VENDOR_NAME,
                  SSV.VENDOR_SITE_CODE,
                  POH.DOCUMENT_NUM PO_NUMBER,
                  POH.COMMENTS,
                  WKF.EMAIL_ADDRESS AS REQUESTOR_EMAIL,
                  WKF.FULL_NAME AS REQUESTOR_NAME,
                  (SELECT WKF.EMAIL_ADDRESS
                     FROM PER_WORKFORCE_X WKF, PO_HEADERS_INTERFACE POH
                    WHERE     POH.PO_HEADER_ID = PLO.PO_HEADER_ID
                          AND POH.AGENT_NAME = WKF.FULL_NAME)
                     AS BUYER_EMAIL
    --

    FROM AP_INVOICE_LINES_ALL AIL,
         AP_INVOICES_ALL APA,
         POZ_SUPPLIERS_V SUP,
         POZ_SUPPLIER_SITES_V SSV                                           --
                                 ,
         PO_HEADERS_INTERFACE POH,
         PO_LINES_ALL PLO,
         PO_LINE_LOCATIONS_ALL PLL,
         PO_DISTRIBUTIONS_ALL PDA                                           --
                                 ,
         AP_HOLDS_ALL HOLDS,
         PER_WORKFORCE_X WKF
   WHERE        APA.INVOICE_ID = AIL.INVOICE_ID
            AND SUP.VENDOR_ID = SSV.VENDOR_ID
            AND APA.VENDOR_SITE_ID = SSV.VENDOR_SITE_ID
            AND POH.PO_HEADER_ID = PLO.PO_HEADER_ID
            AND PLO.PO_LINE_ID = PLL.PO_LINE_ID
            AND PLL.LINE_LOCATION_ID = PDA.LINE_LOCATION_ID
            AND PDA.DELIVER_TO_PERSON_ID = WKF.PERSON_ID
            --

            AND APA.INVOICE_ID = HOLDS.INVOICE_ID
            AND PLL.LINE_LOCATION_ID = HOLDS.LINE_LOCATION_ID(+)
            AND PDA.DELIVER_TO_PERSON_ID = WKF.PERSON_ID
            --

            AND PDA.PO_DISTRIBUTION_ID = AIL.PO_DISTRIBUTION_ID
            AND POH.DOCUMENT_NUM NOT LIKE ('CP%')
            AND SSV.VENDOR_SITE_CODE LIKE ('%B')
            AND WKF.EMAIL_ADDRESS = :xdo_user_name
         OR BUYER_EMAIL = :xdo_user_name
ORDER BY WKF.FULL_NAME, POH.DOCUMENT_NUM, APA.INVOICE_NUM

Ожидаемый результат состоит в том, что он либо показывает запрашивающей стороне свои собственные PO, либо показывает Покупателю все те, где он является Покупателем (несколько запрашивающих)

1 Ответ

1 голос
/ 17 апреля 2019

OR Должны быть заключены в круглые скобки:

AND (   WKF.EMAIL_ADDRESS = :xdo_user_name OR BUYER_EMAIL  = :xdo_user_name)

[EDIT]

справа; BUYER_EMAIL. Это действительно неверно в этом контексте. Вы не можете ссылаться на это таким образом. Простой вариант - использовать текущий запрос в качестве встроенного представления и выбирать из него данные, если выполняется условие: XDO_USER_NAME.

  SELECT *
    FROM (SELECT DISTINCT
                 APA.INVOICE_NUM,
                 APA.INVOICE_AMOUNT,
                 TO_CHAR (APA.INVOICE_DATE, 'DD/MM/YYYY') INVOICE_DATE,
                 SUP.VENDOR_NAME,
                 SSV.VENDOR_SITE_CODE,
                 POH.DOCUMENT_NUM PO_NUMBER,
                 POH.COMMENTS,
                 WKF.EMAIL_ADDRESS AS REQUESTOR_EMAIL,
                 WKF.FULL_NAME AS REQUESTOR_NAME,
                 (SELECT WKF.EMAIL_ADDRESS
                    FROM PER_WORKFORCE_X WKF, PO_HEADERS_INTERFACE POH
                   WHERE     POH.PO_HEADER_ID = PLO.PO_HEADER_ID
                         AND POH.AGENT_NAME = WKF.FULL_NAME)
                    AS BUYER_EMAIL
            --
            FROM AP_INVOICE_LINES_ALL AIL,
                 AP_INVOICES_ALL APA,
                 POZ_SUPPLIERS_V SUP,
                 POZ_SUPPLIER_SITES_V SSV,
                 PO_HEADERS_INTERFACE POH,
                 PO_LINES_ALL PLO,
                 PO_LINE_LOCATIONS_ALL PLL,
                 PO_DISTRIBUTIONS_ALL PDA,
                 AP_HOLDS_ALL HOLDS,
                 PER_WORKFORCE_X WKF
           WHERE     APA.INVOICE_ID = AIL.INVOICE_ID
                 AND SUP.VENDOR_ID = SSV.VENDOR_ID
                 AND APA.VENDOR_SITE_ID = SSV.VENDOR_SITE_ID
                 AND POH.PO_HEADER_ID = PLO.PO_HEADER_ID
                 AND PLO.PO_LINE_ID = PLL.PO_LINE_ID
                 AND PLL.LINE_LOCATION_ID = PDA.LINE_LOCATION_ID
                 AND PDA.DELIVER_TO_PERSON_ID = WKF.PERSON_ID
                 --

                 AND APA.INVOICE_ID = HOLDS.INVOICE_ID
                 AND PLL.LINE_LOCATION_ID = HOLDS.LINE_LOCATION_ID(+)
                 AND PDA.DELIVER_TO_PERSON_ID = WKF.PERSON_ID
                 --

                 AND PDA.PO_DISTRIBUTION_ID = AIL.PO_DISTRIBUTION_ID
                 AND POH.DOCUMENT_NUM NOT LIKE ('CP%')
                 AND SSV.VENDOR_SITE_CODE LIKE ('%B'))
   WHERE     1 = 1
         AND (   REQUESTOR_EMAIL = :xdo_user_name
              OR BUYER_EMAIL = :xdo_user_name)
ORDER BY REQUESTOR_NAME, PO_NUMBER, INVOICE_NUM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...