最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开, 最低版本要求:11.2
注:本题给出答案时候要求给予简要说明才能得到奖品
我想了想,是时候给自己列一个清单了,必须要有哪些东西才能保持安全和健康。于是,我创建了一个表,并插入了一行。然后我创建了一个触发器:
CREATE TABLE qz_must_haves
(
id INTEGER,
nm VARCHAR2 (100)
)
/
BEGIN
INSERT INTO qz_must_haves (id, nm)
VALUES (1, 'Mask');
END;
/
CREATE OR REPLACE TRIGGER qz_must_haves_bi
BEFORE INSERT
ON qz_must_haves
FOR EACH ROW
DECLARE
l_count NUMBER;
BEGIN
SELECT COUNT (*) INTO l_count FROM qz_must_haves;
IF l_count = 0
THEN
raise_application_error (-20000,
'"Must have" means .... you *must* have it!');
END IF;
END;
/
CREATE OR REPLACE PROCEDURE qz_check_for_success
IS
l_count NUMBER;
BEGIN
SELECT COUNT (*) INTO l_count FROM qz_must_haves;
IF l_count > 1
THEN
DBMS_OUTPUT.put_line ('Success :-)');
ELSE
DBMS_OUTPUT.put_line ('Failure :-(');
END IF;
END;
/
但是我要的不只是一个口罩。所以我需要插入更多的行。
哪些选项在执行之后,我再运行如下的代码块,我会看到 "Success :-)" ?
BEGIN
qz_check_for_success;
END;
/
(A)
BEGIN
INSERT INTO qz_must_haves (id, nm)
VALUES (1000, 'Soap');
END;
/
(B)
BEGIN
INSERT INTO qz_must_haves (id, nm)
SELECT 1000, 'Soap' FROM DUAL;
END;
/
(C)
DECLARE
TYPE mh_t IS TABLE OF qz_must_haves%ROWTYPE
INDEX BY PLS_INTEGER;
l_must_haves mh_t;
BEGIN
l_must_haves (1).id := 1000;
l_must_haves (1).nm := 'Soap';
FORALL indx IN 1 .. l_must_haves.COUNT
INSERT INTO qz_must_haves (id, nm)
VALUES (l_must_haves (indx).id, l_must_haves (indx).nm);
END;
/
(D)
INSERT ALL
INTO qz_must_haves (id, nm)
SELECT 1000, 'Soap' FROM DUAL
/
|