4 Stimmen

Oracle-Funktion gibt immer null zurück

Ich kann diese Funktion nicht dazu bringen, sich so zu verhalten, wie ich es möchte. Kann mir jemand sagen, warum sie immer null zurückgibt, anstatt CURRENT_TIMESTAMP?

ERSTELLEN ODER ERSETZEN FUNKTION nowts RETURN TIMESTAMP IST

vTimestamp TIMESTAMP;

BEGIN
  WÄHLE type_date
  IN vTimestamp
  AUS param_table
  WO param_table = 3
  UND EXISTS (
     WÄHLE *
     AUS param_table 
     WO param_table = 2
  );

  WENN vTimestamp IST NULL DANN
    vTimestamp := CURRENT_TIMESTAMP;
  END IF;

  RÜCKGABE vTimestamp;
END nowts;

Derzeit befindet sich nichts in der Tabelle mit dem Namen param_table.

5voto

Alohci Punkte 73204

Wenn keine Zeilen vorhanden sind, wird das select into eine NO_DATA_FOUND-Ausnahme auslösen.

Füge vor dem END nunts hinzu

exception
  when no_data_found then
    return CURRENT_TIMESTAMP;

5voto

Gary Myers Punkte 34373

Wenn Sie eine Funktion aus SQL aufrufen und die Funktion ein NO_DATA_FOUND auslöst, erhalten Sie ein NULL.

Der SQLCODE von einem NO_DATA_FOUND ist +100, während der PL/SQL-Code -1403 ist. Ref

Eine positive Zahl ist kein Fehler, und SQL behandelt das Konzept eines NO_DATA_FOUND nicht als Ausnahme. SQL sieht es als "Kein Wert", der null ist.

create or replace function ret_dt return date is
begin
  raise no_data_found;
end;
/
Elapsed: 00:00:00.26
> select rownum ,ret_dt from user_tables where rownum < 5;
         ROWNUM RET_DT
--------------- -----------------
           1.00
           2.00
           3.00
           4.00

Sie möchten wahrscheinlich dies abfangen und einen spezifischen Wert zurückgeben oder dies abfangen und eine benutzerdefinierte Ausnahme auslösen (je nachdem, was Sie möchten).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X