|
2011-11-16 答案CD.
%ROWTYPE是一种记录,如果你定义两个结构一模一样的记录类型,它们仍然不能够互换,会报类型不匹配的错误。
====================
2011-11-17 AUTHID(定义者权限与使用者权限)
作者:Steven Feuerstein
难度:高
我在HR模式下运行了下列语句(没有发生错误):
CREATE TABLE plch_parts
(
partnum NUMBER
, partname VARCHAR2 (50)
)
/
BEGIN
INSERT INTO plch_parts
VALUES (123, 'Steering Wheel');
INSERT INTO plch_parts
VALUES (456, 'Brake Pedal');
COMMIT;
END;
/
CREATE OR REPLACE TYPE plch_numbers_t IS TABLE OF NUMBER
/
CREATE OR REPLACE FUNCTION plch_func
RETURN plch_numbers_t
AUTHID CURRENT_USER
IS
l_numbers plch_numbers_t;
BEGIN
SELECT partnum
BULK COLLECT INTO l_numbers
FROM plch_parts;
RETURN l_numbers;
END;
/
CREATE OR REPLACE VIEW plch_func_v
AS
SELECT COLUMN_VALUE partnum FROM TABLE (plch_func ())
/
GRANT SELECT ON plch_func_v TO scott
/
GRANT EXECUTE ON plch_func TO scott
/
然后我又连接到SCOTT模式并执行如下语句:
CREATE TABLE plch_parts
(
partnum NUMBER
, partname VARCHAR2 (50)
)
/
BEGIN
INSERT INTO plch_parts
VALUES (100, 'Tire');
INSERT INTO plch_parts
VALUES (101, 'Battery');
COMMIT;
END;
/
哪些选项显示了下列语句块执行后屏幕上的输出结果?
BEGIN
DBMS_OUTPUT.put_line ('Two Cursor For Loops....');
FOR rec IN ( SELECT p.partname
FROM TABLE (hr.plch_func) v, plch_parts p
WHERE v.column_value = p.partnum
ORDER BY p.partnum)
LOOP
DBMS_OUTPUT.put_line (rec.partname);
END LOOP;
FOR rec IN ( SELECT p.partname
FROM hr.plch_func_v v, plch_parts p
WHERE v.partnum = p.partnum
ORDER BY p.partnum)
LOOP
DBMS_OUTPUT.put_line (rec.partname);
END LOOP;
END;
/
(A)
Two Cursor For Loops....
Steering Wheel
Brake Pedal
(B)
An unhandled exception:
PLS-00158: AUTHID CURRENT_USER subprograms not allowed in views
(C)
Two Cursor For Loops....
Tire
Battery
(D)
Two Cursor For Loops....
Tire
Battery
Steering Wheel
Brake Pedal
(E)
Two Cursor For Loops....
Tire
Battery
Tire
Battery
|
|