ALTER SESSION SET plsql_warnings = 'enable:all'
CREATE OR REPLACE FUNCTION my_function
RETURN BOOLEAN AUTHID DEFINER
IS
BEGIN
RETURN FALSE;
END;
CREATE OR REPLACE FUNCTION my_date
RETURN DATE AUTHID DEFINER
IS
BEGIN
RETURN SYSDATE - 10;
END;
CREATE OR REPLACE FUNCTION no_return (check_in IN BOOLEAN)
RETURN VARCHAR2
AS
BEGIN
IF check_in
THEN
RETURN 'abc';
ELSE
DBMS_OUTPUT.put_line ('Here I am, here I stay');
IF my_function ()
THEN
RETURN 'def';
ELSIF SYSDATE < my_date ()
THEN
RETURN 'qrs';
ELSE
DBMS_OUTPUT.put_line ('Hello!');
END IF;
END IF;
END no_return;
select text from user_errors
where name = 'NO_RETURN'
TEXT | PLW-05018: unit NO_RETURN omitted optional AUTHID clause; default value DEFINER used | PLW-05005: subprogram NO_RETURN returns without value at line 21 |
---|
BEGIN
DBMS_OUTPUT.put_line (no_return (FALSE));
END;
ALTER SESSION SET plsql_warnings = 'ERROR:5005'
ALTER FUNCTION no_return COMPILE
CREATE OR REPLACE FUNCTION no_return (check_in IN BOOLEAN)
RETURN VARCHAR2
AS
BEGIN
IF check_in
THEN
RETURN 'abc';
ELSE
DBMS_OUTPUT.put_line ('Here I am, here I stay');
IF check_in
THEN
RETURN 'def';
ELSIF SYSDATE IS NOT NULL
THEN
RETURN 'qrs';
ELSE
DBMS_OUTPUT.put_line ('Hello!');
RETURN 'hello';
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END no_return;
CREATE OR REPLACE FUNCTION no_return (check_in IN BOOLEAN)
RETURN VARCHAR2
AS
BEGIN
RETURN NULL;
EXCEPTION
WHEN OTHERS
THEN
RAISE NO_DATA_FOUND;
END no_return;
CREATE OR REPLACE FUNCTION error5005
RETURN INTEGER
IS
BEGIN
RETURN 5;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20001, 'Error 5005');
END;
CREATE OR REPLACE FUNCTION error5005
RETURN INTEGER
IS
BEGIN
RETURN 5;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20001, 'Error 5005');
END;
CREATE OR REPLACE FUNCTION no_return (check_in IN BOOLEAN)
RETURN VARCHAR2
AS
l_return VARCHAR2 (32767);
BEGIN
IF check_in
THEN
l_return := 'abc';
ELSE
DBMS_OUTPUT.put_line ('Here I am, here I stay');
IF check_in
THEN
l_return := 'def';
ELSIF SYSDATE IS NOT NULL
THEN
l_return := 'qrs';
ELSE
DBMS_OUTPUT.put_line ('Hello!');
l_return := 'hello';
END IF;
END IF;
RETURN l_return;
EXCEPTION
WHEN OTHERS
THEN
-- In theory: log_error ();
RAISE;
END no_return;