(原发表于 2011-12-20)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我们的员工表看起来像这样:
CREATE TABLE plch_employees
(
employee_id INTEGER
, last_name VARCHAR2 (100)
, first_name VARCHAR2 (100)
, hire_date DATE
, salary NUMBER
)
/
BEGIN
INSERT INTO plch_employees
VALUES (100
, 'Clooney'
, 'Sam'
, DATE '2011-12-07'
, 10000);
INSERT INTO plch_employees
VALUES (200
, 'Craig'
, 'Donna'
, DATE '2011-12-01'
, 15000);
INSERT INTO plch_employees
VALUES (300
, 'Mirren'
, 'Horace'
, DATE '2011-11-23'
, 17000);
COMMIT;
END;
/
员工在被录用的当月的最后一天被评估(即使这天是周六或周日!)。我写了一个过程来显示每个员工的姓和评估日期:
CREATE OR REPLACE PROCEDURE plch_show_evals
IS
BEGIN
FOR employee_rec IN ( SELECT last_name, hire_date
FROM plch_employees
ORDER BY hire_date)
LOOP
DBMS_OUTPUT.put_line (
employee_rec.last_name
|| ':'
|| TO_CHAR (
plch_last_date (employee_rec.hire_date)
, 'YYYY-MM-DD'));
END LOOP;
END;
/
哪些选项实现了函数,从而使得过程plch_show_evals在执行之后,将会显示下列文本?
Mirren:2011-11-30
Craig:2011-12-31
Clooney:2011-12-31
(A)
CREATE OR REPLACE FUNCTION plch_last_date (date_in IN DATE)
RETURN DATE
IS
BEGIN
RETURN TRUNC (ADD_MONTHS (date_in, 1), 'MON') - 1;
END;
(B)
CREATE OR REPLACE FUNCTION plch_last_date (date_in IN DATE)
RETURN DATE
IS
BEGIN
RETURN LAST_DATE (date_in);
END;
(C)
CREATE OR REPLACE FUNCTION plch_last_date (date_in IN DATE)
RETURN DATE
IS
BEGIN
RETURN LAST_DAY (date_in);
END;
(D)
CREATE OR REPLACE FUNCTION plch_last_date (date_in IN DATE)
RETURN DATE
IS
BEGIN
RETURN date_in.LAST_DAY;
END;