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.