PL/SQL-block-problem: "Keine Daten gefunden" - Fehler
SET SERVEROUTPUT ON
DECLARE
v_student_id NUMBER := &sv_student_id;
v_section_id NUMBER := 89;
v_final_grade NUMBER;
v_letter_grade CHAR(1);
BEGIN
SELECT final_grade
INTO v_final_grade
FROM enrollment
WHERE student_id = v_student_id
AND section_id = v_section_id;
CASE -- outer CASE
WHEN v_final_grade IS NULL THEN
DBMS_OUTPUT.PUT_LINE ('There is no final grade.');
ELSE
CASE -- inner CASE
WHEN v_final_grade >= 90 THEN v_letter_grade := 'A';
WHEN v_final_grade >= 80 THEN v_letter_grade := 'B';
WHEN v_final_grade >= 70 THEN v_letter_grade := 'C';
WHEN v_final_grade >= 60 THEN v_letter_grade := 'D';
ELSE v_letter_grade := 'F';
END CASE;
-- control resumes here after inner CASE terminates
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '||v_letter_grade);
END CASE;
-- control resumes here after outer CASE terminates
END;
den obigen code habe ich aus dem Buch "Oracle PL/SQL by Example, 4. Auflage 2009" mein problem ist wenn ich ein student_id
nicht in der Tabelle vorhanden es gibt mir die folgende Fehlermeldung
Fehlerbericht: ORA-01403: keine Daten gefunden ORA-06512: in Zeile 7 01403. 00000 - "keine Daten gefunden" *Ursache: *Aktion:
aber laut dem Buch sollte es ein Nullwert zurückgegeben, und Folgen Sie dann den Fall fließen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Auswahl IN eine variable und es gibt keine Datensätze zurückgegeben, Sie sollten KEINE DATEN GEFUNDEN " - Fehler. Ich glaube, den richtigen Weg zu schreiben, würde der obige code sein, wickeln Sie die SELECT-Anweisung mit eigener BEGIN/AUSNAHME/END-block. Beispiel:
Sein könnte lohnt für die online-errata-Abschnitt, der für Ihr Buch.
Es ist ein Beispiel, der Umgang mit dieser Ausnahme hier http://www.dba-oracle.com/sf_ora_01403_no_data_found.htm
Ihre
SELECT
Erklärung ist nicht zu finden die Daten, die Sie suchen. Das heißt, es ist kein Datensatz in derENROLLMENT
Tabelle mit dem angegebenenSTUDENT_ID
undSECTION_ID
. Möchten Sie vielleicht zu versuchen, einigeDBMS_OUTPUT.PUT_LINE
Anweisungen aus, bevor Sie die Abfrage ausführen, drucken Sie die Werte derv_student_id
undv_section_id
. Sie können nicht mit, was Sie von Ihnen erwarten, zu enthalten.Gibt es einen alternativen Ansatz, den ich verwendet, wenn ich konnte mich nicht darauf verlassen, dass die
EXCEPTION
block an der Unterseite von meinem Verfahren. Ich hatte deklarierten Variablen am Anfang:Diese Daten nicht gefunden wird verursacht, weil einige datatype wir verwenden .
select empid in v_test
oben empid und v_test hat die Nummer geben , dann werden nur die Daten gespeichert werden .
So verfolgen Sie die Daten geben , wenn diese Fehlermeldung bekommen , kann dies helfen,