raise_salary(emp_num, amount);
The next procedure call shows that in some cases, expressions can be used as actual parameters:
raise_salary(emp_num, merit + cola);
The variables declared in a subprogram specification and referenced in the subprogram body are formal parameters. For example, the following procedure declares two formal parameters named emp_id and increase:
PROCEDURE raise_salary (emp_id INTEGER, increase REAL) IS current_salary REAL; ... BEGIN SELECT sal INTO current_salary FROM emp WHERE empno = emp_id; ... UPDATE emp SET sal = sal + increase WHERE empno = emp_id; END raise_salary;
Though not necessary, it is good programming practice to use different names for actual and formal parameters.
When you call procedure raise_salary, the actual parameters are evaluated and the result values are assigned to the corresponding formal parameters. Before assigning the value of an actual parameter to a formal parameter, PL/SQL converts the datatype of the value if necessary. For example, the following call to raise_salary is legal:
raise_salary(emp_num, '2500');
The actual parameter and its corresponding formal parameter must have compatible datatypes. For instance, PL/SQL cannot convert between the DATE and REAL datatypes. Also, the result value must be convertible to the new datatype. The following procedure call raises the predefined exception VALUE_ERROR because PL/SQL cannot convert the second actual parameter to a number:
raise_salary(emp_num, '$2500'); -- note the dollar sign
For more information, see "Datatype Conversion" .