Nein. Es ist nicht eine Best Practice für Funktionen nach dem Hochfahren und Fehler in PL/SQL zurückzukehren.
Es ist möglich und manchmal sogar Code empfohlen, fügen Sie einfach den Compiler den Mund zu halten, wie:
exception
when fooex then
raise_application_error(-20100, 'invalid number');
return null; -- silence PLW-05005
end;
Achten Sie darauf, einen solchen eigentümlichen Code zu dokumentieren!
Generell mag ich keinen Code, der nur dazu da ist Compiler-Warnung zu erfüllen, aber es gibt immer Ausnahmen von dieser Regel. In diesem speziellen Fall würde ich sagen, dass das Problem eher der Compiler als der Code ist.Meiner Meinung nach ist Code wie unten perfekt und der Compiler sollte sich nicht beschweren. Tatsächlich denke ich, dass der Compiler warnen sollte, wenn ein Block Anweisungen nach raise
enthält, da es sich effektiv um einen Dead-Code handelt (nicht erreichbarer Code).
Lassen Sie uns die folgende Funktion betrachten:
$ cat foo.sql
create or replace function foo(p_in in number)
return number is
fooex exception;
begin
if p_in < 1 then
raise fooex;
end if;
return p_in;
exception
when fooex then
raise_application_error(-20100, 'invalid number');
end;
/
show errors
das Lauf in XE Oracle 11g:
-- By default the warnings are disabled
SQL> @foo
Function created.
No errors.
Normalerweise möchte ich alle Warnungen:
SQL> alter session set plsql_warnings = 'ENABLE:ALL';
Session altered.
SQL> @foo
SP2-0806: Function created with compilation warnings
Errors for FUNCTION FOO:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1 PLW-05005: subprogram FOO returns without value at line 13
1/1 PLW-05018: unit FOO omitted optional AUTHID clause; default
value DEFINER used
Nach den Code Überprüfung fand ich Wenn die obigen Warnungen nicht korrekt sind, deaktiviere ich sie nur für diese Kompilierungseinheit:
SQL> alter session set plsql_warnings = 'ENABLE:ALL, DISABLE:(5005,5018)';
Session altered.
SQL> @foo
Function created.
No errors.
SQL>
Jetzt ist alles gut und großartig.
Ich empfehle, alle Warnungen standardmäßig zu aktivieren und dann falsche positive Werte pro Kompilierungseinheit (alter session set plsql_warnings = 'ENABLE:ALL, DISABLE:(5005,5018)';
) zu deaktivieren. Wenn möglich: alter system plsql_warnings = 'ENABLE:ALL';
aber in der Praxis könnte dies ein bisschen zu hart sein ...
Und oh, es ist eine empfohlene Praxis, alle Compiler Fehlerprüfungen zu aktivieren. Wir als Programmierer brauchen die ganze Hilfe, die die Compiler uns geben können! Leider muss dies mit dem Oracle PL/SQL Compiler kompromittiert werden.
Auch, wenn Sie die Rückgabe dorthin setzen, sollte der Prüfer "Zeile nicht erreichbar" sagen. –
In diesem Fall ist der Validator der PL/SQL-Compiler von Oracle. – user272735
Ja ... es ist durcheinander. Es ist der Unterschied zwischen menschlicher Analyse und künstlicher AI-Analyse. –