|
2011-11-2 答案D.
A: 在SQL中调用的函数不能有DML, 除非是自治事务;
B: 虽然用了自治事务,但是在返回之前(PIPE ROW 就是返回一行数据)必须提交或回滚这个事务;
C: 虽然用了自治事务而且有COMMIT, 但是位置不对,COMMIT放在循环外面,这样在返回(PIPE ROW)之前还是没有提交。
==================================================================
2011-11-3 触发器
作者:Steven Feuerstein
难度:低
我们维护一张客户表,这张表的内容在周六和周日不允许修改。这就是客户表:
CREATE TABLE plch_customers
(
custnum INTEGER
, custname VARCHAR2 (100)
)
我需要创建一个触发器来阻止周末对这张表的任何插入、修改和删除。我写了这些代码:
CREATE OR REPLACE TRIGGER plch_customers_maint_trg
/*TEXT*/
DECLARE
BEGIN
IF TO_CHAR (SYSDATE, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
IN ('SAT', 'SUN')
THEN
RAISE_APPLICATION_ERROR (-20000
, 'Customers maintained Monday-Friday only.');
END IF;
END;
/
哪些选项可用来取代文中的/*TEXT*/, 使得这个触发器不允许周末对plch_customers表执行任何DML操作,并且每个语句只触发一次?
(A)
BEFORE UPDATE ON plch_customers FOR EACH ROW
BEFORE INSERT ON plch_customers FOR EACH ROW
BEFORE DELETE ON plch_customers FOR EACH ROW
(B)
BEFORE UPDATE ON plch_customers
BEFORE INSERT ON plch_customers
BEFORE DELETE ON plch_customers
(C)
BEFORE UPDATE, INSERT OR DELETE ON plch_customers
(D)
BEFORE UPDATE OR INSERT OR DELETE ON plch_customers FOR EACH ROW
(E)
BEFORE UPDATE OR INSERT OR DELETE ON plch_customers
|
|