Functions (Cont.)
In PL/SQL, parameters are not copies but the actual argument variables used in the function call, and the compiler rejects code that tries to modify them.
SQL> CREATE FUNCTION increase( x INT ) RETURN INT IS
2 BEGIN
3 x := x + 1; -- change x, a parameter variable
4 -- **ERROR — WON’T COMPILE**
5 RETURN x; -- We should have written “return x+1”
6 END;
7 /
Warning: Function created with compilation errors.
|
It would not be possible to use
increase(x in out int)
in arbitrary SQL statement, because SQL expressions are not supposed to change data.
Since parameter variables must be read-only, we need to declare local variables to hold immediate and final results.
SQL> CREATE TYPE name_type AS OBJECT (
2 lname VARCHAR(32),
3 fname VARCHAR(32),
4 mi CHAR(1) );
Type created.
SQL> CREATE TYPE person_type AS OBJECT (
2 ssno INT,
3 pname name_type,
4 age INT );
Type created.
SQL> CREATE TABLE people_tab OF person_type;
Table created.
SQL> INSERT INTO people_tab VALUES (
2 person_type( 123456789, name_type( 'Door', 'Kids', 'N' ), 36 ) );
1 row created.
|