Database Programming With PL/SQL 9-1: Practice Activities: Creating Functions
Database Programming With PL/SQL 9-1: Practice Activities: Creating Functions
Database Programming With PL/SQL 9-1: Practice Activities: Creating Functions
com/academy
A named PL/SQL block that can accept optional IN parameters and must return a single output.
Try It / Solve It
1. Name the characteristics of a stored function.
2. Create a function called full_name. Pass two parameters to the function, an employee’s last name
and first name. The function should return the full name in the format, last name, comma, space,
first name (for example: Smith, Joe). Save your code.
A. Test your function from an anonymous block which uses a local variable to store and display
the returned value.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
2
B. Modify your anonymous block from the previous step to remove the local variable declaration
and call the function directly from within the DBMS_OUTPUT.PUT_LINE call. Test the block
again.
C. Now call the function from within a SELECT statement, not a PL/SQL block. Your SELECT
statement should display the first_name, last_name, and full name (using the function) of all
employees in department 50. Your output should look like this:
3. Create a function called divide that accepts two numbers as input and returns the result of
dividing the first number by the second number, rounded to two decimal places. Save your
code.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their
respective owners.
A. Test your function twice from an anonymous block using input values (50, 2)
and (25, 3).
B. Test your function a third time using input values (16, 0). What happens?
C. Modify the function code to trap the ZERO_DIVIDE exception. The exception handler should
return a value of zero from the function if ZERO_DIVIDE is raised.
D. Test your function again using input values (16,0) as before. Now what happens?
A. For a given country id, will both of these subprograms return the same results?
B. What is the advantage of creating this subprogram as a function rather than as a procedure?
C. Which of the following procedure and function calls are valid and which are not? Explain why
the invalid ones will fail.
DECLARE
v_country_id countries.country_id%TYPE := 2;
v_country_name countries.country_name%TYPE;
BEGIN
get_country_name_proc(v_country_id, v_country_name); -- Call 1
v_country_name := get_country_name_func(v_country_id); -- Call 2
v_country_name := get_country_name_proc(v_country_id); -- Call 3
END;