Hallo,
für die Schule müssen wir was in PL/SQL machen. Jetzt suche ich seit 7,5 h den Fehler, aber ich bin nicht fähig ihn zu finden.
Ich möchte die oberen beiden Funktionen in der untern aufrufen. Der SQL-Code ist ok, nur die Verbindungen scheinen in der Syntax nicht zu stimmen.
Mein Code:
Testen tun wir über JUnit per Eclipse. Sobald einmal eine Data-Access-Exception geworfen wird und im anderen Fall eine Exemplar-Unlendable-Exception, gilt die Aufgabe als gelöst. Es werden tatsächlich beide Exeptions ausgelöst, aber nur einzeln.
Läuft das gesamte Script durch, erhalte ich diese Fehlermeldungen:
- erstelle_ausl_o_vorbest => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- richtigesMedium => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Data-Access-Exception wird geworfen
Entferne ich "if existiertNutzer ... ", erhalte ich diese Fehlermeldungen:
- erstelle_ausl_o_vorbest => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- existiertNutzer => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Exemplar-Unlendable-Exception wird geworfen
Entferne ich beide "if ... ", erhalte ich diese Fehlermeldungen:
- existiertNutzer => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- richtigesMedium => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Datum wird ausgegebn
Hat jemand einen Tipp für mich? Ich werde bald irre...
Gruß Matthias
für die Schule müssen wir was in PL/SQL machen. Jetzt suche ich seit 7,5 h den Fehler, aber ich bin nicht fähig ihn zu finden.
Ich möchte die oberen beiden Funktionen in der untern aufrufen. Der SQL-Code ist ok, nur die Verbindungen scheinen in der Syntax nicht zu stimmen.
Mein Code:
SQL:
create or replace
PACKAGE BODY AUSLEIHE_SERVICE AS
/* Existiert Nutzer ? */
FUNCTION existiertNutzer (
p_ausweis_nr Nutzer.AusweisNr%TYPE
) RETURN VARCHAR2 AS v_ausweis_nr VARCHAR2(255);
BEGIN
SELECT AusweisNr INTO v_ausweis_nr
FROM Nutzer
WHERE AusweisNr = p_ausweis_nr;
EXCEPTION
when no_data_found then v_ausweis_nr := '0';
RETURN v_ausweis_nr;
END existiertNutzer;
--
/* Ist Exemplar das richtige Medium? */
FUNCTION richtigesMedium (
p_signatur Medium.Signatur%TYPE
) RETURN VARCHAR2 AS v_signatur VARCHAR2(255);
BEGIN
SELECT signatur INTO v_signatur
FROM Medium m
INNER JOIN medienart ma ON m.martid = ma.martid
WHERE (ma.martid LIKE '1'
OR ma.martid > 5)
AND Signatur = p_signatur;
EXCEPTION
when no_data_found then v_signatur:= '0';
RETURN v_signatur;
END richtigesMedium;
--
FUNCTION erstelle_ausl_o_vorbest(
p_ausweis_nr Nutzer.AusweisNr%TYPE,
p_standort_nr Standort.SoNummer%TYPE,
p_signatur Medium.Signatur%TYPE
) RETURN DATE IS datum DATE;
BEGIN
datum := current_date + 28;
if existiertNutzer(p_ausweis_nr) = '0' then raise data_access; end if;
if richtigesMedium(p_signatur) = '0' then raise exemplar_unlendable; end if;
RETURN datum;
END erstelle_ausl_o_vorbest;
--
END AUSLEIHE_SERVICE;
Läuft das gesamte Script durch, erhalte ich diese Fehlermeldungen:
- erstelle_ausl_o_vorbest => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- richtigesMedium => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Data-Access-Exception wird geworfen
Entferne ich "if existiertNutzer ... ", erhalte ich diese Fehlermeldungen:
- erstelle_ausl_o_vorbest => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- existiertNutzer => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Exemplar-Unlendable-Exception wird geworfen
Entferne ich beide "if ... ", erhalte ich diese Fehlermeldungen:
- existiertNutzer => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
- richtigesMedium => ORA-06503: PL/SQL: Funktion hat keinen Wert zurückgegeben
Datum wird ausgegebn
Hat jemand einen Tipp für mich? Ich werde bald irre...
Gruß Matthias