Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Unerklärliches verhalten einer Funktion (https://www.delphipraxis.net/158244-unerklaerliches-verhalten-einer-funktion.html)

p80286 10. Feb 2011 11:18

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

Unerklärliches verhalten einer Funktion
 
Hallo zusammen,

ich habe eine funktion, die mehrere Personen, die zu einer Akte gehören in einem String ausgeben soll.
Nun existiert eine "Dummy"-Person die dort nicht auftauchen soll.
Wenn ich es so mache kommt ein Leer-String zurück:
Code:
create or replace function GET_INVLIST(inCasekey NUMBER) return VARCHAR as
  CURSOR c_cur is select Name.name,Nameindividual.Firstname
from casename, name, NameIndividual
where Casename.Namekey=Name.Namekey
  and Casename.Nametypekey=209
  and Casename.Casekey=inCaseKey
  and NameIndividual.Namekey=Name.Namekey
  and Name.Name<>'DUMMY_INV'
;  
  tsatz c_cur%ROWTYPE;
  satz varchar(2048);
begin
  satz:='';
  for tsatz in c_cur
  loop
     Exit when c_cur%NOTFOUND;
     satz:=satz||tsatz.Name||', '||tsatz.Firstname||'; ';
  end loop;
  RETURN(trim(trailing ';' from trim(satz)));
end;
/
So funktioniert es:
Code:
create or replace function GET_INVLIST(inCasekey NUMBER) return VARCHAR as
  CURSOR c_cur is select Name.name,Nameindividual.Firstname
from casename, name, NameIndividual
where Casename.Namekey=Name.Namekey
  and Casename.Nametypekey=209
  and Casename.Casekey=inCaseKey
  and NameIndividual.Namekey=Name.Namekey
  and Name.NameKey<>3
;  
  tsatz c_cur%ROWTYPE;
  satz varchar(2048);
begin
  satz:='';
  for tsatz in c_cur
  loop
     Exit when c_cur%NOTFOUND;
     satz:=satz||tsatz.Name||', '||tsatz.Firstname||'; ';
  end loop;
  RETURN(trim(trailing ';' from trim(satz)));
end;
/
Kann mir jemand erklären warum?
Gruß
K-H

jobo 10. Feb 2011 11:35

AW: Unerklärliches verhalten einer Funktion
 
Ich würde sagen, es gibt keinen Eintrag Name.Name, der anders lautet als 'DUMMY_INV',
dafür aber Name.NameKey Werte, die anders als 3 sind.

Einfach mal Gegenprobe im Select machen.
Ggf. das Verhalten bei Vergleichen mit NULL berücksichtigen, "<>" als Operator ist da ungünstig.

p80286 10. Feb 2011 11:46

AW: Unerklärliches verhalten einer Funktion
 
Ich war da wohl etwas ungenau,
Es gibt jede Menge anderer Namen und auch anderer Keys, NULL ist in diesem Falle nicht relvant.
Ich vermute, daß es ein "String"-Problem ist.
Nur, in einer "normalen" Abfrage funktioniert es.

Gruß
K-H

jobo 10. Feb 2011 12:29

AW: Unerklärliches verhalten einer Funktion
 
Was soll das für "String" Problem sein?
Meinst Du vielleicht die String Theory? ;-)

Versuch dich ranzurobben.
- Sicherstellen, dass die Joins stimmen
- Sicherstellen, dass die "vielen Werte" wirklich in der Joinkombi enthalten sind.
- "normaler" SQL ist vermutlich aus SQLPLUS oder so gefeuert, hier differieren mglw die NLS Session Settings zur stored proc am Server
- Stichprobe: Function so umschreiben, dass sie nur dein Kriterium zurückgibt, evtl 1) direkt, 2) durch select from dual eingekleidet
- einfach mal impliziten Cursor probieren
- in jedem Fall den expliziten Cursor in Deiner Proc auch schließen

p80286 10. Feb 2011 12:58

AW: Unerklärliches verhalten einer Funktion
 
Danke,
Da mach ich mich mal ran!

Gruß
K-H

Edith:

Seit ich den Cursor Close (brr watn Deutsch) tritt der Fehler nicht mehr auf.
Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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