AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Unerklärliches verhalten einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Unerklärliches verhalten einer Funktion

Ein Thema von p80286 · begonnen am 10. Feb 2011 · letzter Beitrag vom 10. Feb 2011
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Unerklärliches verhalten einer Funktion

  Alt 10. Feb 2011, 11:18
Datenbank: oracle • Version: 9 • Zugriff über: egal
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Unerklärliches verhalten einer Funktion

  Alt 10. Feb 2011, 11:35
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Unerklärliches verhalten einer Funktion

  Alt 10. Feb 2011, 11:46
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Unerklärliches verhalten einer Funktion

  Alt 10. Feb 2011, 12:29
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
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Unerklärliches verhalten einer Funktion

  Alt 10. Feb 2011, 12:58
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!
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (10. Feb 2011 um 14:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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