Entwickler-Ecke
Datenbanken - kann ich eigene funktionen im select aufrufen? Wenn ja wie?
CenBells - Di 22.10.02 18:43
Titel: kann ich eigene funktionen im select aufrufen? Wenn ja wie?
Hallo
ich habe eine procedure get_min_val, welche zwei ints bekommt und das kleinere von beiden zurückliefert.
select g.nationalitaet,
sum( get_min_val('31.10.2002'- '01.10.2002', b.auszug_datum - b.einzug_datum)) as Tage
from belegungen b, gaeste g
where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null)))
and g.gaeste_key = b.gaeste_key
Group by g.nationalitaet
nun würde ich gerne dieses statement ausführen. Kann ich das und wenn ja wie? so gibt es den fehler unbekanntes symbol get_min_val
gruß
Ken
LCS - Mi 23.10.02 08:19
Hi
Versuchs mal mit
Quelltext
1: 2: 3: 4: 5: 6:
| select g.nationalitaet, sum( execute procedure get_min_val ('31.10.2002'- '01.10.2002'), (b.auszug_datum - b.einzug_datum)) as Tage from belegungen b, gaeste g where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null))) and g.gaeste_key = b.gaeste_key Group by g.nationalitaet |
Konnte ich nicht testen, müsste aber funktionieren.
Gruss Lothar
CenBells - Do 24.10.02 12:22
danke, aber dann bekomme ich in isql den fehler
unbekannter Token execute
Kannst du damit was anfangen?
LCS - Do 24.10.02 12:33
Hm, ne...war nen Versuch wert :?
Ich hab das so allerdings auch noch nie gemacht. Da müsste ich auch erst mal damit experimentieren.
Gruss Lothar
Udontknow - Do 24.10.02 12:55
fast richtig! Man muss die Prozedur wie eine normale Tabelle behandeln!
Quelltext
1: 2: 3: 4: 5: 6:
| select g.nationalitaet, sum( select [b]Ergebnis[/b] from get_min_val ('31.10.2002'- '01.10.2002'), (b.auszug_datum - b.einzug_datum)) as Tage from belegungen b, gaeste g where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null))) and g.gaeste_key = b.gaeste_key Group by g.nationalitaet |
Ergebnis ist in diesem Falle das Ausgabefeld der Prozedur.
Cu,
Udontknow
CenBells - Do 24.10.02 16:27
hallo,
danke für den hinweis.
ich habe das getestet, abe dann kommt die fehlermeldung unbekannter token select
Quelltext
1: 2: 3: 4: 5: 6:
| select g.nationalitaet, sum( select * from get_min_val ('31.10.2002'- '01.10.2002'), (b.auszug_datum - b.einzug_datum)) as Tage from belegungen b, gaeste g where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null))) and g.gaeste_key = b.gaeste_key Group by g.nationalitaet |
LCS - Fr 25.10.02 06:44
Hi
ich hab gestern einige Zeit damit verbracht das auszutesten mit dem Ergebnis, dass ich kein Ergebnis habe. :?
Prozeduren, die aus einem Programm ausgerufen werden oder die direkt mit den Daten arbeiten sind kein Problem. Prozeduren die wie eine Funktion ein Ergebnis innerhalb eines Select-Statements zurückliefern machen die merkwürdigsten Sachen.
Ich denke, ich werde mich übers Wochenende mal näher mit den UDFs beschäftigen, denn das scheint mir der beste Lösungsansatz zu sein.
Gruss Lothar
Udontknow - Fr 25.10.02 08:14
Hmmm, kann gut sein, dass es so nicht funzt, ich benutze Prozedurergebnisse meist nur in der Where-Klausel, da funktioniert es dann aber auch hunderprozentig.
Überhaupt, warum machst du nicht für diese Berechnung eine Prozedur?
Cu, :)
Udontknow
CenBells - Fr 25.10.02 10:08
habe ja auch ein prozedur gemacht, aber ich dachte, so eine minimum von zwei werten funktion wäre richtig schick und könnte man oft mal gebrauchen
Gruß
Ken
Udontknow - Fr 25.10.02 10:16
Kannst du doch auch benutzen. Nur eben nicht in einer Summierung eines Select-Statements.
Lemmy - Fr 25.10.02 12:01
Damit müsste es doch gehen:
Quelltext
1: 2: 3: 4: 5:
| select g.nationalitaet, sum(v.Ergebnis) as Tage from belegungen b, gaeste g, get_min_val('31.10.2002'- '01.10.2002', b.auszug_datum - b.einzug_datum) v where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null))) and g.gaeste_key = b.gaeste_key Group by g.nationalitaet |
Zumindest funzt das so immer bei meinen SP.
Ach ja, besser ist aber:
Quelltext
1: 2: 3: 4: 5:
| select g.nationalitaet, sum(v.Ergebnis) as Tage from belegungen b join gaeste g ON g.gaeste_key = b.gaeste_key get_min_val('31.10.2002'- '01.10.2002', b.auszug_datum - b.einzug_datum) v where ((b.einzug_datum <= '31.10.2002') and ((b.auszug_datum >= '01.10.2002') OR (b.auszug_datum is null))) Group by g.nationalitaet |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!