NOT EXISTS查询中的Oracle视图不起作用

pb3s4cty  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(126)

我有以下查询不起作用。它返回inv视图中的所有行。当我将视图复制到一个静态表中并在查询中使用该静态表时,查询会正常工作,并且只产生几行。因此,使用带有NOT EXISTS子查询的视图是有问题的。有人能解释一下这是真的吗?或者我有另一个错误。
更新:在我们的开发环境中,完全相同的查询工作正常。现在我更困惑了。

SELECT inv.organization_id, inv.inventory_item_id
  FROM inventory_v inv
 WHERE NOT EXISTS (SELECT 1 
                     FROM inventory_int xx
                    WHERE xx.item_id = inv.inventory_item_id 
                      AND xx.org_id = inv.organization_id
                  )
;

更新:查看解释计划,了解有效的开发查询和无效的生产查询。我真的不知道该怎么解释。

更新:仍然无法理解。奇怪的是,生产解释计划没有过滤器,但开发一个。生产数据库是12c,开发数据库是19c。
PROD

Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("INVENTORY_ITEM_ID"(+)="MSI"."INVENTORY_ITEM_ID" AND "ORGANIZATION_ID"(+)="MSI"."ORGANIZATION_ID")
   5 - access("ORG"."ORGANIZATION_ID"="MSI"."ORGANIZATION_ID")
   7 - access("SUB"."SUBINVENTORY_CODE"="OH"."SUBINVENTORY_CODE" AND "SUB"."PRIMARY_SHIPPING_ORG_ID"="OH"."ORGANIZATION_ID")
   9 - access("MSI"."ORGANIZATION_ID"="PRIMARY_SHIPPING_ORG_ID")
  11 - access("ERP_ORG_ID"=TO_NUMBER("CONTROL_VALUE"))
  12 - filter("EXTRACT_TYPE"='ORG' AND "ACTIVE_FLAG"='Y')
  13 - access("CONTROL_TYPE"='SFC_E_EBS_OPERATING_UNIT')
  15 - access("OH"."ORGANIZATION_ID"="MSI"."ORGANIZATION_ID" AND "OH"."INVENTORY_ITEM_ID"="MSI"."INVENTORY_ITEM_ID")

DEV

Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter( NOT EXISTS (SELECT 0 FROM "SFC_E_INVENTORY_INT" "XX" WHERE "XX"."ITEM_ID"=:B1 AND "XX"."ORG_ID"=:B2))
   3 - access("INVENTORY_ITEM_ID"(+)="MSI"."INVENTORY_ITEM_ID" AND "ORGANIZATION_ID"(+)="MSI"."ORGANIZATION_ID")
   6 - access("ORG"."ORGANIZATION_ID"="MSI"."ORGANIZATION_ID")
   8 - access("SUB"."SUBINVENTORY_CODE"="OH"."SUBINVENTORY_CODE" AND "SUB"."PRIMARY_SHIPPING_ORG_ID"="OH"."ORGANIZATION_ID")
  10 - access("MSI"."ORGANIZATION_ID"="PRIMARY_SHIPPING_ORG_ID")
  12 - access("ERP_ORG_ID"=TO_NUMBER("CONTROL_VALUE"))
  13 - filter("EXTRACT_TYPE"='ORG' AND "ACTIVE_FLAG"='Y')
  14 - access("CONTROL_TYPE"='SFC_E_EBS_OPERATING_UNIT')
  16 - access("OH"."ORGANIZATION_ID"="MSI"."ORGANIZATION_ID" AND "OH"."INVENTORY_ITEM_ID"="MSI"."INVENTORY_ITEM_ID")
  19 - access("XX"."ORG_ID"=:B1 AND "XX"."ITEM_ID"=:B2)
shyt4zoc

shyt4zoc1#

结果是视图通过dblink将表引用到另一个Oracle示例。我想我可能在12c中遇到了一个bug,因为它在19c中工作得很好。我把NOT EXISTS移到了视图中,这就解决了我的问题。

相关问题