G-7240: Avoid using an IN OUT parameter as IN or OUT only.
Major
Efficiency, Maintainability
Reason
By showing the mode of parameters, you help the reader. If you do not specify a parameter mode, the default mode is in
. Explicitly showing the mode indication of all parameters is a more assertive action than simply taking the default mode. Anyone reviewing the code later will be more confident that you intended the parameter mode to be in
/ out
.
Example (bad)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | create or replace package body employee_up is procedure rcv_emp (io_first_name in out employee.first_name%type ,io_last_name in out employee.last_name%type ,io_email in out employee.email%type ,io_phone_number in out employee.phone_number%type ,io_hire_date in out employee.hire_date%type ,io_job_id in out employee.job_id%type ,io_salary in out employee.salary%type ,io_commission_pct in out employee.commission_pct%type ,io_manager_id in out employee.manager_id%type ,io_department_id in out employee.department_id%type ,in_wait integer) is l_status pls_integer; k_pipe_name constant string(6 char) := 'mypipe'; k_ok constant pls_integer := 1; begin -- receive next message and unpack for each column. l_status := sys.dbms_pipe.receive_message(pipename => k_pipe_name ,timeout => in_wait); if l_status = k_ok then sys.dbms_pipe.unpack_message (io_first_name); sys.dbms_pipe.unpack_message (io_last_name); sys.dbms_pipe.unpack_message (io_email); sys.dbms_pipe.unpack_message (io_phone_number); sys.dbms_pipe.unpack_message (io_hire_date); sys.dbms_pipe.unpack_message (io_job_id); sys.dbms_pipe.unpack_message (io_salary); sys.dbms_pipe.unpack_message (io_commission_pct); sys.dbms_pipe.unpack_message (io_manager_id); sys.dbms_pipe.unpack_message (io_department_id); end if; end rcv_emp; end employee_up; / |
Example (good)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | create or replace package body employee_up is procedure rcv_emp (out_first_name out employee.first_name%type ,out_last_name out employee.last_name%type ,out_email out employee.email%type ,out_phone_number out employee.phone_number%type ,out_hire_date out employee.hire_date%type ,out_job_id out employee.job_id%type ,out_salary out employee.salary%type ,out_commission_pct out employee.commission_pct%type ,out_manager_id out employee.manager_id%type ,out_department_id out employee.department_id%type ,in_wait in integer) is l_status pls_integer; k_pipe_name constant string(6 char) := 'mypipe'; k_ok constant pls_integer := 1; begin -- receive next message and unpack for each column. l_status := sys.dbms_pipe.receive_message(pipename => k_pipe_name ,timeout => in_wait); if l_status = k_ok then sys.dbms_pipe.unpack_message (out_first_name); sys.dbms_pipe.unpack_message (out_last_name); sys.dbms_pipe.unpack_message (out_email); sys.dbms_pipe.unpack_message (out_phone_number); sys.dbms_pipe.unpack_message (out_hire_date); sys.dbms_pipe.unpack_message (out_job_id); sys.dbms_pipe.unpack_message (out_salary); sys.dbms_pipe.unpack_message (out_commission_pct); sys.dbms_pipe.unpack_message (out_manager_id); sys.dbms_pipe.unpack_message (out_department_id); end if; end rcv_emp; end employee_up; / |