Ganymed Geschrieben 27. April 2004 Teilen Geschrieben 27. April 2004 Hallo zusammen, ja ich habe mal wieder was seltsames gefunden, und hoffe, dass hier jemand sowas auch schon mal hatte. Folgendes: Ich habe eine Funktion in PL/SQL geschrieben. Soweit so gut. Keine Kompilierungesfehler oder dergleichen. Syntaktisch alles in Ordnung. Wenn ich das Ganze teste, dann bekomme ich für ein SQL-Statement kein Ergebnis und die Funktion wird mit einem Fehler beendet. Wenn ich aber das SQL-Statement ohne die Funktion mit denen von der Funktion entsprechenden Werten alleine Teste, dann funktionierts :confused: Den Code jetzt zu posten ist was kompliziert, weil die Tabellen recht umfangreich verknüpft sind. Ich versuchs mal an einem Beispiel zu erklären, was das deutlich machen soll: "Funktionsausschnitt" Select Name into vName from tblPersonen Where ID = Variable; --> Variable hat zum Beispiel den Wert 1234, den übergebe ich der Funktion --> Nach absetzen des Statements ist vName = 0 "SQL-Statement alleine" Select Name from tblPersonen Where ID = 1234; --> Ergibt meinen gewünschten Wert... Ein Exeption Handling müsste ich nicht machen, denn das Ganze ist so gestrickt, dass ich immer einen Wert bekomme... Versteht jemand das? Mal gehts und mal nicht!? Ich zerbrech mir schon stundenlang den Kopf darüber und komm zu keinem Ergebnis... Gruß Ganymed Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 27. April 2004 Teilen Geschrieben 27. April 2004 Kannst Du mal die Fehlermeldung posten? Ich hatte mal genau so ein Problem, das wurde ganz kompliziert gelöst, obwohl, wie es ja bei Dir auch ist, immer ein Wert zurückgegeben werden kann. Ich poste mal meinen Code, aber ich weiß nicht, ob Dir das weiterhilft. Kann sein, dass bei mir ein anderer Fehler auftrat als bei Dir. Aber mit diesem Code ist der Fehler dann nicht mehr aufgetreten. function UmwandlungIdEmail(id in number) return varchar2 is cursor eAdresse( nID number) is select f.email from mitarbeiter m, funktion f where m.manr = nID and m.refid = f.refid; emailadresse eAdresse%ROWTYPE; begin open eAdresse (id); fetch eAdresse into emailadresse; if eAdresse%NOTFOUND then htp.p('keine eMail-Adresse gefunden für ID='||id); return('postmaster@xxx.de'); else return (emailadresse.email); end if; exception when no_data_found then htp.p('keine eMail-Adresse gefunden für ID='||id); return('postmaster@xxx.de'); end UmwandlungIdEmail; Hoffe, dass Dir das weiterhilft. Gruß dorti Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 27. April 2004 Teilen Geschrieben 27. April 2004 Hmm, was bringt er denn für ein Fehlermeldung ? Stimmen die Datentypen in der Funktion, irgendwo <<">> ,<<'>> oder <<;>> vergessen ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 27. April 2004 Autor Teilen Geschrieben 27. April 2004 ORA-06503: PL/SQL: Function returned without value. Das ist die Fehlermeldung. Das Problem ist ja eigentlich, dass er die Meldung nur bei der Funktion bringt. Setze ich das Statement (an der Stelle, wo er den Wert "0" -nicht NULL- liefert) ohne die Funktion ab, dann bekomme ich ja was ich will... Nachtrag: Ne Exeption kann und darf ich gar nicht schreiben! Es geht in meinem Problem um Preise und Artikel. Und ein Preis steht nie ohne Artikel da... :mod: Du hast ja letztendlich den Fehler einfach abgefangen. Aber es muss ein Ergbnis rauskommen. Nur halt einzeln kommsts raus... :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dorti Geschrieben 27. April 2004 Teilen Geschrieben 27. April 2004 Die Funktion liefert Dir den Wert 0 und meldet gleichzeitig einen Fehler? Das ist ja komisch... Bei mir kam der Fehler, ich denke, es war sogar der gleiche Fehler, aber die Funktion hat mir keine 0 oder sonstwas ausgespuckt. Klar, hab ich den Fehler abgefangen, aber es gab keine ID-Spalte, der nicht auch eine Emailadresse zugeordnet war. Deswegen war das Abfangen des Fehlers eigentlich unnötig, aber die Datenbank wollte das so und nur so hab ich das Problem beseitigen können. Gruß dorti Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 27. April 2004 Autor Teilen Geschrieben 27. April 2004 Original geschrieben von dorti Die Funktion liefert Dir den Wert 0 und meldet gleichzeitig einen Fehler? Das ist ja komisch... Bei mir kam der Fehler, ich denke, es war sogar der gleiche Fehler, aber die Funktion hat mir keine 0 oder sonstwas ausgespuckt. Klar, hab ich den Fehler abgefangen, aber es gab keine ID-Spalte, der nicht auch eine Emailadresse zugeordnet war. Deswegen war das Abfangen des Fehlers eigentlich unnötig, aber die Datenbank wollte das so und nur so hab ich das Problem beseitigen können. Gruß dorti Nein, nein Die Funktion liefert 0 zurück - korrekt. Und das ist ja genau der Fehler... Ist halt die Frage, wie sowas kommen kann:confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 27. April 2004 Teilen Geschrieben 27. April 2004 Hast du in der Funktion nen RETURN-Statement? Wird dieses (oder ein anderes) RETURN-Statement ganz sicher ausgeführt? Vielleicht solltest du es dochmal mit ner Exception versuchen (vielleicht auch erstmal zum tetsen mit OTHERS, damit du siehst ob es daran lag...) Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 27. April 2004 Autor Teilen Geschrieben 27. April 2004 Original geschrieben von AxlHammer Hast du in der Funktion nen RETURN-Statement? Wird dieses (oder ein anderes) RETURN-Statement ganz sicher ausgeführt? Vielleicht solltest du es dochmal mit ner Exception versuchen (vielleicht auch erstmal zum tetsen mit OTHERS, damit du siehst ob es daran lag...) Gruss, Axl Ja ich habe ein return-Statement. Es wird ja nicht ausgeführt, weil er nichts findet. Hmm... ich glaub mein Problem ist noch nicht ganz klar... Also: Ich habe einen Artikel. Dieser Artikel hat einen Preis. Die ID des Artikels übergebe ich meiner Funktion. Mit Hilfe dieser ID soll der Preis ermittelt werden. Es gibt immer einen Preis zu einem Artikel (Default 0,00 €). Von daher muss mir mein SQL-Statement (vereinfacht) Select ID into PreisID from Preise where aID = übergebene Variable --> da muss jetzt eine ID als Wert rauskommen. Da aber keiner Kommt, habe ich 0 und die Funktion hat keinen Return Wert. --> Ergo diese Oracle Meldung. Soweit klar? Wenn ich aber dieses SQL-Statement einfach mal aus dieser Funktion herausnehme, ein SQL-Skript-Fenster aufmache und anstatt der Variable einen konkreten Wert (idealerweise den Wert, den die Funktion bekommt) eingebe, dann bekomme ich einen Wert. Und das ist das kuriose an der Sache. Warum findet er in meiner Funktion nichts, aber im SQL-Sktipt Fenster? Ich habe das exakte Statement (ohne das "into" versteht sich). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 29. April 2004 Teilen Geschrieben 29. April 2004 Ah, jetzt ja... Da du ja wahrscheinlich immer noch der gleiche Benutzer bist, würde ich vielleicht mal davon ausgehen dass irgendwas mit deinen Datentypen nicht stimmt, d.h. dass du vielleicht der Funktion einen NUMBER-Datentyp übergibst und dieser den dann als VARCHAR umwandelt oder so... Kann das vielleicht sein? Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 29. April 2004 Autor Teilen Geschrieben 29. April 2004 Ah, jetzt ja... Da du ja wahrscheinlich immer noch der gleiche Benutzer bist, würde ich vielleicht mal davon ausgehen dass irgendwas mit deinen Datentypen nicht stimmt, d.h. dass du vielleicht der Funktion einen NUMBER-Datentyp übergibst und dieser den dann als VARCHAR umwandelt oder so... Kann das vielleicht sein? Gruss, Axl Wie immer noch der gleiche User bin? :confused: Nein, ich übergebe jedesmal nen Number-Wert... PS: ne Eintagsfliege wars wohl auch nicht; habs nämlich immer noch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 30. April 2004 Teilen Geschrieben 30. April 2004 Tja, keine Ahnung voran das liegen könnte. Am besten postet du mal den Quellcode, und am besten auch die Werte die du übergibst... Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 7. Mai 2004 Autor Teilen Geschrieben 7. Mai 2004 Also, um das Ganze jetzt mal aufzuklären: Das Problem lag an meiner Variablen-Deklaration. Eine Variable hieß genauso wie eine ID und deswegen ist PL/SQL durcheinander gekommen. Witzigerweise hat man das im Testfenster nirgends gesehen! Merke: immer einen anderen Präfix für Variablen verwenden als in der Datenbank Hatte einmal numPrice (ID) und einmal numPrice (Variable). Nachdem ich aus dem einen numPrice ein vPrice (für Variable ) gamcht hatte, gings Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.