Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Oracle DB spinnt (https://www.delphipraxis.net/171893-oracle-db-spinnt.html)

p80286 30. Nov 2012 16:25

Datenbank: oracle • Version: 10 • Zugriff über: egal

Oracle DB spinnt
 
hallo zusammen,

set zwei Stunden versuche ich den Fehler zu finden komme aber nicht zu Potte
Code:
select v_srbib.Casereference,v_srbib.casekey, origin,henattorney,division,site,productpatent.*
from v_srbib
    ,v_references
    ,v_persons
    ,(select count(casekey) cnt,familykey from cases where familykey is not null group by familykey) src
    ,productpatent
where v_srbib.casekey=src.familykey(+)
  and src.cnt is null
  and v_srbib.Casetypekey=2
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241462)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241534)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241561)
--  and not exists ( select * from productpatent where productpatent.casefamilykey=v_srbib.casekey and productpatentkey is not null )
  and v_srbib.casekey=v_references.casekey(+)
  and v_srbib.casekey=v_persons.casekey(+)
  and v_srbib.casereference not like 'T%'
  and v_srbib.casekey=productpatent.casefamilykey(+)
--  and productpatentkey(+) is null
order by v_srbib.casereference
diese Abfrage liefert 130 Datensätze wobei man bei zwei Datensätzen einträge in Productpatent sieht.

Code:
  ..
  and v_srbib.casereference not like 'T%'
  and v_srbib.casekey=productpatent.casefamilykey(+)
  and productpatentkey(+) is null
order by v_srbib.casereference
diese Version liefert 130 Datensätze ohne das man Einträge in Productpatent sieht.

folgende Versionen liefern als ergebnis 0 Datensätze
Code:
  ...
  and v_srbib.casekey=v_persons.casekey(+)
  and v_srbib.casereference not like 'T%'
  and v_srbib.casekey=productpatent.casefamilykey(+)
  and productpatentkey is null
order by v_srbib.casereference
Code:
select v_srbib.Casereference,v_srbib.casekey, origin,henattorney,division,site,productpatent.*
from v_srbib
    ,v_references
    ,v_persons
    ,(select count(casekey) cnt,familykey from cases where familykey is not null group by familykey) src
    ,productpatent
where v_srbib.casekey=src.familykey(+)
  and src.cnt is null
  and v_srbib.Casetypekey=2
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241462)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241534)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241561)
  and not exists ( select * from productpatent where productpatent.casefamilykey=v_srbib.casekey and productpatentkey is not null )
  and v_srbib.casekey=v_references.casekey(+)
  and v_srbib.casekey=v_persons.casekey(+)
  and v_srbib.casereference not like 'T%'
  and v_srbib.casekey=productpatent.casefamilykey(+)
--  and productpatentkey(+) is null
order by v_srbib.casereference

select v_srbib.Casereference,v_srbib.casekey, origin,henattorney,division,site,productpatent.*
from v_srbib
    ,v_references
    ,v_persons
    ,(select count(casekey) cnt,familykey from cases where familykey is not null group by familykey) src
    ,productpatent
where v_srbib.casekey=src.familykey(+)
  and src.cnt is null
  and v_srbib.Casetypekey=2
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241462)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241534)
  and not exists ( select * from caseevent where caseevent.casekey=v_srbib.casekey and caseevent.Eventkey=20241561)
  and exists ( select * from productpatent where productpatent.casefamilykey=v_srbib.casekey and productpatentkey is not null )
  and v_srbib.casekey=v_references.casekey(+)
  and v_srbib.casekey=v_persons.casekey(+)
  and v_srbib.casereference not like 'T%'
  and v_srbib.casekey=productpatent.casefamilykey(+)
--  and productpatentkey(+) is null
order by v_srbib.casereference
könnt Ihr mir einen Tip geben was ich übersehen habe?
(wenn ich das productpatent-Zeugs weglasse ist ales vollkommen in Ordnung)


Gruß
K-H

jobo 30. Nov 2012 16:58

AW: Oracle DB spinnt
 
Was erwartest Du denn für Ergebnisse?

Welche Inhalte stehen in Variante 130:2 in ProductPatentKey?
(HIer ist die Exists Clause auskommentiert, es ist ein einfacher Outer Join)

In Variante 130:0 wird zusätzlich ProductPatentKey auf Null eingeschränkt.

Was ist mit der Existszeile von ProduktPatent in Variante 0:0?
Weiter unten führst Du zweimal das gleiche(?) Statement auf, die exists Zeile ist aber einmal negiert.
1. Es darf keine Sätze geben, deren join mit productpatent Werte mit Produktpatentkey NULL enthalten
2. Es muss einen Satz geben, dessen join mit productpatent Werte mit Produktpatentkey NULL enthält

p80286 30. Nov 2012 17:32

AW: Oracle DB spinnt
 
Also erwarten würde ich bei
Code:
and productpatentkey is null
128 Datensätze, die zwei gefüllten sollten damit außen vor sein

ursprünglich wollte ich das mit dem
Code:
not exists()
erreichen was aber darauf hinauslief, daß wohl alle V_srbib Einträge auch Einträge in productpatent hätten.

Das vollkommen bescheuerte ist, daß ich nur zwei Einträge sehe, Die nächstliegende Erklärung wäre, daß da irgendwo ein Syntaxfehler lauert, aber ich kann nichts erkennen.

Na gut am Montag gehts weiter,
schönes Wochenende.

Gruß
K-H

p80286 3. Dez 2012 11:04

AW: Oracle DB spinnt
 
Es ist Montag und der Fehler ist erkannt,
so funktioniert es
Code:
  and not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey in (20241462,20241534,20241561))
130 Datensätze

und so nicht:
Code:
  and not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241462)
  and not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241534)
  and not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241561)
kein Datensatz

wenn jemand weiß warum, dann her damit, sonst schau ich mal Weihnachten was dahinter steckt.

Gruß
K-H

Union 3. Dez 2012 12:35

AW: Oracle DB spinnt
 
and mit or verwechselt und Klammer drum fehlt.
Code:
and (not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241462)
  or not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241534)
  or not exists ( select * from caseevent where caseevent.casekey=cases.casekey and caseevent.Eventkey=20241561))


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz