54.Evaluate the following function code:
CREATE FUNCTION get_dept_avg(dept_id NUMBER) RETURN NUMBER RESULT_CACHE
RELIES_ON
(EMPLOYEES) IS avgsal NUMBER(6);
BEGIN
SELECT AVG(SALARY)INTO avgsal
FROM EMPLOYEES
WHERE DEPARTMENT_ID = dept_id;
RETURN avgsal;
END get_dept_avg;
Which statement is true regarding the above function?
A. The cached result becomes invalid when any structural change is done to the EMPLOYEES table.
B. If the function execution results in an unhandled exception, the exception result is also stored in the
cache.
C. Each time the function is invoked in a different session, the current result in the result cache gets
overwritten.
D. If the function is invoked with a different parameter value, the existing result in the result cache gets
overwritten by the latest value.
Answer: A
Enabling Result-Caching for a Function
To make a function result-cached, include the RESULT_CACHE
clause in the function definition. (If you declare the function before defining it,
you must also include the RESULT_CACHE
option in the function declaration.)
In Example 8-37, the package department_pkg
declares and then
defines a result-cached function, get_dept_info
, which returns a record of information about a given department. The function depends on the database tables DEPARTMENTS
and EMPLOYEES
.
Example 8-37 Declaring and Defining Result-Cached Function
You invoke the function get_dept_info
as you invoke any function. For example, this invocation returns a record of information about department number 10:
This invocation returns only the name of department number 10:
If the result for get_dept_info(10)
is in the result cache, the result is returned from the cache; otherwise, the result is computed and added to the cache. Because get_dept_info
depends on the DEPARTMENTS
and EMPLOYEES
tables,
any committed change to DEPARTMENTS
or EMPLOYEES
invalidates all cached results forget_dept_info
, relieving you of programming cache invalidation logic everywhere that DEPARTMENTS
or EMPLOYEES
might
change.