本帖最后由 newkid 于 2015-7-3 03:27 编辑
(原发表于2010-11-30)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
HR模式下的员工表(employees)是这样子的:
CREATE TABLE our_employees (
last_name VARCHAR2(100),
date_of_birth DATE
)
/
我需要实现一个触发器,使得员工年龄至少为18岁。所以我写了如下代码:
CREATE OR REPLACE TRIGGER employees_too_young_tr
AFTER INSERT OR UPDATE
ON our_employees
FOR EACH ROW
BEGIN
IF :NEW.date_of_birth > ADD_MONTHS (SYSDATE, -12 * 18)
THEN
/*STOP!*/
END IF;
END employees_too_young_tr;
哪些选项可用来取代/*STOP!*/注释,使得触发器编译之后,我执行下列代码块,屏幕上显示的文本将会含有 "Employee must be 18"字样? 假设在选项中除了我抛出的那个错误之外,ORACLE不会抛出其他错误。
BEGIN
INSERT INTO our_employees
VALUES ('Feuerstein', SYSDATE);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
(A)
RAISE_APPLICATION_ERROR (-20000, 'Employee must be 18');
(B)
DBMS_STANDARD.RAISE_APPLICATION_ERROR (-20000, 'Employee must be 18');
(C)
RAISE (-20000, 'Employee must be 18');
(D)
RAISE 'Employee must be 18';
(E)
DECLARE
e_too_young EXCEPTION;
BEGIN
RAISE e_too_young;
END;
|