create or replace FUNCTION source_at_line (name_in IN VARCHAR2, line_in IN INTEGER := 1, type_in IN VARCHAR2 := NULL) RETURN VARCHAR2 IS CURSOR source_cur IS SELECT text FROM user_source WHERE name = UPPER (name_in) AND (type = UPPER (type_in) OR type_in IS NULL) AND line = line_in; source_rec source_cur%ROWTYPE; BEGIN OPEN source_cur; FETCH source_cur INTO source_rec; IF source_cur%NOTFOUND THEN CLOSE source_cur; RETURN NULL; ELSE CLOSE source_cur; RETURN source_rec.text; END IF; END; /