Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Не срабатывает кляуза в таблицах OeBS  [new]
Data corruption
Guest
Помогите, пожалуйста, разобраться.
Сам селект + план.

SQL*Plus: Release 10.1.0.4.2 - Production on Чт Июл 21 14:05:33 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Присоединен к:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set linesize 999
SQL> SELECT COUNT(*)
  2    FROM (SELECT *
  3            FROM (SELECT DISTINCT APPS.AP_INVOICES_UTILITY_PKG.GET_APPROVAL_STATUS(AI.INVOICE_ID,

  4                                                                                   AI.INVOICE_AMO
UNT,
  5                                                                                   AI.PAYMENT_STA
TUS_FLAG,
  6                                                                                   AI.INVOICE_TYP
E_LOOKUP_CODE) AS GET_APPROVAL_STATUS,
  7                                  AI.INVOICE_NUM DOC_NUMBER,
  8                                  AI.INVOICE_CURRENCY_CODE CURRENCY_CODE
  9                    FROM AP.AP_INVOICES_ALL       AI,
 10                         AP.AP_INVOICE_LINES_ALL  AIL,
 11                         AP.AP_SUPPLIERS          AAS,
 12                         AP.AP_SUPPLIER_SITES_ALL ASA,
 13                         AR.HZ_PARTIES            HP
 14                   WHERE 1 = 1
 15                         AND AI.INVOICE_ID = AIL.INVOICE_ID
 16                         AND AIL.LINE_TYPE_LOOKUP_CODE = 'ITEM'
 17                         AND ASA.VENDOR_ID = AAS.VENDOR_ID
 18                         AND AI.VENDOR_SITE_ID = ASA.VENDOR_SITE_ID
 19                         AND AI.PARTY_ID = HP.PARTY_ID
 20                         AND AAS.VENDOR_ID = AI.VENDOR_ID)
 21           WHERE 1 = 1
 22                 AND (GET_APPROVAL_STATUS != 'NEEDS REAPPROVAL' OR
 23                 GET_APPROVAL_STATUS != 'UNAPPROVED' OR
 24                 GET_APPROVAL_STATUS != 'CANCELLED' OR
 25                 GET_APPROVAL_STATUS != 'NEVER APPROVED'))
 26   WHERE GET_APPROVAL_STATUS = 'CANCELLED'
 27  /

  COUNT(*)
----------
       368

SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID  b6dzh7g8sjxpy, child number 0
-------------------------------------
SELECT COUNT(*)   FROM (SELECT *           FROM (SELECT DISTINCT
APPS.AP_INVOICES_UTILITY_PKG.GET_APPROVAL_STATUS(AI.INVOICE_ID,

 AI.INVOICE_AMOUNT,
                             AI.PAYMENT_STATUS_FLAG,

AI.INVOICE_TYPE_LOOKUP_CODE) AS GET_APPROVAL_STATUS,
             AI.INVOICE_NUM DOC_NUMBER,
AI.INVOICE_CURRENCY_CODE CURRENCY_CODE                   FROM

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
AP.AP_INVOICES_ALL       AI,
AP.AP_INVOICE_LINES_ALL  AIL,                        AP.AP_SUPPLIERS
      AAS,                        AP.AP_SUPPLIER_SITES_ALL ASA,
               AR.HZ_PARTIES            HP                  WHERE 1 = 1
                       AND AI.INVOICE_ID = AIL.INVOICE_ID
         AND AIL.LINE_TYPE_LOOKUP_CODE

Plan hash value: 2380043683

----------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name                  | E-Rows |  OMem |  1Mem | Used-Mem |

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                       |        |       |       |          |
|   1 |  SORT AGGREGATE                    |                       |      1 |       |       |          |
|   2 |   VIEW                             |                       |      1 |       |       |          |
|   3 |    HASH UNIQUE                     |                       |      1 |   873K|   873K| 1270K (0)|
|   4 |     NESTED LOOPS                   |                       |        |       |       |          |
|   5 |      NESTED LOOPS                  |                       |      1 |       |       |          |
|   6 |       NESTED LOOPS                 |                       |      1 |       |       |          |
|   7 |        NESTED LOOPS                |                       |      1 |       |       |          |
|   8 |         NESTED LOOPS               |                       |      8 |       |       |          |
|*  9 |          TABLE ACCESS FULL         | AP_INVOICES_ALL       |      8 |       |       |          |

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
|* 10 |          INDEX UNIQUE SCAN         | AP_SUPPLIERS_U1       |      1 |       |       |          |
|* 11 |         TABLE ACCESS BY INDEX ROWID| AP_SUPPLIER_SITES_ALL |      1 |       |       |          |
|* 12 |          INDEX UNIQUE SCAN         | AP_SUPPLIER_SITES_U1  |      1 |       |       |          |
|* 13 |        INDEX UNIQUE SCAN           | HZ_PARTIES_U1         |      1 |       |       |          |
|* 14 |       INDEX RANGE SCAN             | AP_INVOICE_LINES_U1   |      6 |       |       |          |
|* 15 |      TABLE ACCESS BY INDEX ROWID   | AP_INVOICE_LINES_ALL  |      2 |       |       |          |
----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------


PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
   9 - filter(("AP_INVOICES_UTILITY_PKG"."GET_APPROVAL_STATUS"("AI"."INVOICE_ID","AI"."INVOICE_A
              MOUNT","AI"."PAYMENT_STATUS_FLAG","AI"."INVOICE_TYPE_LOOKUP_CODE")='CANCELLED' AND
              ("AP_INVOICES_UTILITY_PKG"."GET_APPROVAL_STATUS"("AI"."INVOICE_ID","AI"."INVOICE_AMOUNT","AI"
              AYMENT_STATUS_FLAG","AI"."INVOICE_TYPE_LOOKUP_CODE")<>'NEEDS REAPPROVAL' OR
              "AP_INVOICES_UTILITY_PKG"."GET_APPROVAL_STATUS"("AI"."INVOICE_ID","AI"."INVOICE_AMOUNT","AI".
              YMENT_STATUS_FLAG","AI"."INVOICE_TYPE_LOOKUP_CODE")<>'UNAPPROVED' OR
              "AP_INVOICES_UTILITY_PKG"."GET_APPROVAL_STATUS"("AI"."INVOICE_ID","AI"."INVOICE_AMOUNT","AI".
              YMENT_STATUS_FLAG","AI"."INVOICE_TYPE_LOOKUP_CODE")<>'CANCELLED' OR
              "AP_INVOICES_UTILITY_PKG"."GET_APPROVAL_STATUS"("AI"."INVOICE_ID","AI"."INVOICE_AMOUNT","AI".
              YMENT_STATUS_FLAG","AI"."INVOICE_TYPE_LOOKUP_CODE")<>'NEVER APPROVED')))
  10 - access("AAS"."VENDOR_ID"="AI"."VENDOR_ID")

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
  11 - filter("ASA"."VENDOR_ID"="AAS"."VENDOR_ID")
  12 - access("AI"."VENDOR_SITE_ID"="ASA"."VENDOR_SITE_ID")
  13 - access("AI"."PARTY_ID"="HP"."PARTY_ID")
  14 - access("AI"."INVOICE_ID"="AIL"."INVOICE_ID")
  15 - filter("AIL"."LINE_TYPE_LOOKUP_CODE"='ITEM')

Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------


67 строк выбрано.
21 июл 11, 14:08    [11006757]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Data corruption,
Вопрос то какой?
21 июл 11, 14:32    [11006956]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
Оффтоп

GET_APPROVAL_STATUS != 'NEEDS REAPPROVAL' OR
                  GET_APPROVAL_STATUS != 'UNAPPROVED' OR
                  GET_APPROVAL_STATUS != 'CANCELLED' OR
                  GET_APPROVAL_STATUS != 'NEVER APPROVED'
очень сексуально
21 июл 11, 14:38    [11007012]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
Data corruption
Guest
ten,

Вопрос в том что я внутреннюю выборку изначально ограничиваю
GET_APPROVAL_STATUS != 'CANCELLED'
но если обернуть и сделать выборку
GET_APPROVAL_STATUS = 'CANCELLED'
он возвращает 368 строк.

AlexFF__|,
да суть не в этом, перечислю в NOT IN.
21 июл 11, 14:42    [11007052]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
Data corruption
AlexFF__|,
да суть не в этом, перечислю в NOT IN.

Суть именно в этом.
Я хотел посмеяться, а оказалось, что попал в глаз =)
21 июл 11, 14:57    [11007210]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
Data corruption
Guest
AlexFF__|,

точно, уже проверил.
filter(NULL IS NOT NULL).

простите лузера :)
спасибо AlexFF__|.
21 июл 11, 15:00    [11007230]     Ответить | Цитировать Сообщить модератору
 Re: Не срабатывает кляуза в таблицах OeBS  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Data corruption,

...OR
GET_APPROVAL_STATUS != 'CANCELLED' OR

Так что не устраивает то? Что просишь, то и получаешь.
21 июл 11, 15:02    [11007241]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить