|
2011-11-23 答案AB.
A和B都反复调用同样的函数并使用同样的参数。加上deterministic 之后, 函数结果会被缓存,只有一次调用。
C:语法错误,嵌套子程序里面不可以用deterministic。
D:每次参数都发生变化因此无法缓存。
=========================================
2011-11-24 RESULT_CACHE函数
作者:koko
难度:中
我创建了如下的表并填入数据:
CREATE TABLE plch_tab
(
this_is_it VARCHAR2 (20)
, another_column NUMBER (2)
)
/
BEGIN
INSERT INTO plch_tab (this_is_it)
VALUES ('PL/SQL Challenge');
COMMIT;
END;
/
然后我编译了如下的函数:
CREATE OR REPLACE FUNCTION plch_foo (p_in_value IN NUMBER)
RETURN VARCHAR2
RESULT_CACHE
IS
lvretval plch_tab.this_is_it%TYPE;
BEGIN
SELECT this_is_it INTO lvretval FROM plch_tab;
DBMS_OUTPUT.put_line (lvretval);
RETURN lvretval;
END;
/
哪些代码块执行之后会显示 "PL/SQL Challenge" 仅仅一次?
(A)
DECLARE
lvdummy plch_tab.this_is_it%TYPE;
BEGIN
lvdummy := plch_foo (NULL);
lvdummy := plch_foo (NULL);
END;
/
(B)
DECLARE
lvDummy plch_tab.this_is_it%TYPE;
BEGIN
lvDummy := plch_foo(1);
lvDummy := plch_foo(1);
END;
/
(C)
DECLARE
lvdummy plch_tab.this_is_it%TYPE;
BEGIN
lvdummy := plch_foo (2);
UPDATE plch_tab SET another_column = 1;
COMMIT;
lvdummy := plch_foo (2);
END;
/
(D)
DECLARE
lvdummy plch_tab.this_is_it%TYPE;
BEGIN
lvdummy := plch_foo (3);
UPDATE plch_tab SET another_column = 1;
lvdummy := plch_foo (3);
END;
/
(E)
DECLARE
lvdummy plch_tab.this_is_it%TYPE;
BEGIN
lvdummy := plch_foo (4);
UPDATE plch_tab
SET another_column = 1
WHERE another_column = 2;
lvdummy := plch_foo (4);
END;
/ |
|