Oracle 10g, PL/SQL : Wo ist der Fehler?

Hallo,

ich habe folgende Funktion erstellt, die eine Zahl übergeben bekommt und per Sequenz die Zahl um den Wert 1 erhöht werden soll.

create or replace function SPGetSeqNumber(aNumber out number) return number is
Result number;
begin
Result := SeqNumber.Nextval;
return(Result);
end SPGetSeqNumber;

Sollte evtl. noch sagen das ich mich grad in das Thema reinarbeite :wink:

Ciao Axl

Hallo,

„übergeben bekommt“ heißt IN, nicht OUT.
Die Zahl ist unnötig, sie wird in der Prozedur nicht verwendet.
SELECT sequenz.NEXTVAL INTO result FROM DUAL;

Die Oracle Fehlermeldung wäre hilfreich gewesen.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Mahlzet,

Kollege Goppelt-Langer hat Recht: ein Beispielaufruf mitsamt Fehlermeldung wäre hilfreich. Aber:

ich habe folgende Funktion erstellt, die eine Zahl übergeben
bekommt und per Sequenz die Zahl um den Wert 1 erhöht werden
soll.

Das ist komplett daneben. Eine kann man nicht per Sequenz erhöhen. Man erhöht die Zahl, und gut ist. Wenn eine Sequenz erhöht wird, wird nur sie selbst erhöht.

create or replace function SPGetSeqNumber( aNumber out number )
return number is
Result number;
begin
Result := SeqNumber.Nextval ;
return(Result);
end SPGetSeqNumber;

Ich habe drei Passagen fettgemacht.

Erstens, der Übergabeparameter aNumber: wenn Du ihn als OUT deklarierst, dann willst Du ihn innerhalb der Prozedur mit einem Wert belegen, der vom aufrufenden Programm ausgewertet werden soll. Das willst Du aber wahrscheinlich nicht; Du willst wohl, daß die Funktion einen Wert zurückgibt, und das ist was ich an zweiter Stelle hervorgehoben habe.

Drittens, da steht nur „SeqNumber.Nextval“ - da wird eine Sequence erhöht, dies hat keinen Effekt auf etwaige Parameter.

Gruß

Sancho