|
2011-8-6 答案A.
函数执行顺序是从里到外。第一次调用add_months,把1月30号加上一个月会得到2月29号,即月末。第二次调用会得到3月的月末即3月31号。
如果只调用一次add_months,为1月30号加上两个月,则会得到3月30号。
add_months对月末处理有些特殊,必须记住。
===================================================
2011-8-13 NULL的处理
作者:Patrick Barel
难度:低
假设我们有这张表:
create table plch_employees (
employee_id number (4) NOT NULL
, employee_name varchar2 (10) NOT NULL
, employee_salary number (7,2) NOT NULL
, employee_comm number (7,2) );
我们填入了下列数据:
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7369, 'SMITH' , 800 , NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7499, 'ALLEN' , 1600, 300 );
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7521, 'WARD' , 1250, 500 );
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7566, 'JONES' , 2975, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7654, 'MARTIN', 1250, 1400);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7698, 'BLAKE' , 2850, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7782, 'CLARK' , 2450, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7788, 'SCOTT' , 3000, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7839, 'KING' , 5000, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7844, 'TURNER', 1500, 0 );
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7876, 'ADAMS' , 1100, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7900, 'JAMES' , 950 , NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7902, 'FORD' , 3000, NULL);
insert into plch_employees(employee_id, employee_name, employee_salary, employee_comm)
values ( 7934, 'MILLER', 1300, NULL);
commit;
我们想要得到一个员工的所有收入(即工资 salary +佣金commission)。哪些查询能够给我们正确结果?
(A)
select e.employee_name, e.employee_salary + nvl(e.employee_comm, 0)
from plch_employees e
/
(B)
select e.employee_name
, coalesce(e.employee_comm + e.employee_salary, e.employee_salary)
from plch_employees e
/
(C)
select e.employee_name
, coalesce(e.employee_salary, e.employee_comm + e.employee_salary)
from plch_employees e
/
(D)
select e.employee_name
, e.employee_salary + coalesce(e.employee_comm, 0)
from plch_employees e
/
(E)
select e.employee_name, e.employee_salary + case
when e.employee_comm is null then 0
else e.employee_comm
end
from plch_employees e
/
(F)
select e.employee_name, e.employee_salary + e.employee_comm
from plch_employees e
/
|
|