单行函数计算
nvl(bonus, 0)
upper(job) = 'ANALYST'
round(salary, 2)
to_char(sysdate, 'yyyy/mm/dd')
to_date('2012-01-12','yyyy-mm-dd')
select ename, salary, bonus,
coalesce(bonus, salary * 0.5, 100)
as bo
from emp_ning;
coalesce(list):
返回参数列表中第一个非空值
0-9分
create table ielts_ning(name char(10),s1 number(2,1),s2 number(2,1),s3 number(2,1),s4 number(2,1));
insert into ielts_ning values('A', 8, 8, 6, 7);
insert into ielts_ningvalues('B', 6, 6, 7, 7);
insert into ielts_ningvalues('C', 6, 7, 7, 7);
insert into ielts_ningvalues('D', 8, 6.5, 6, 6);
姓名 听力 阅读 写作 口语 总分
name s1 s2 s3 s4
number(2,1)
张三 8 8 6 7 7.25-> 7.5
李四 6 6 7 7 6.5 -> 6.5
6 7 7 7 6.75-> 7
6.125 -> 6
6.625 6.5
[0, 0.25) [0.25, 0.75) [0.75, 1)
0 0.5 1
select name, s1, s2, s3,s4,
(s1+s2+s3+s4)/4 s
from ielts_ning;
7.25
整数位: trunc((s1+s2+s3+s4)/4) -> 7
小数:mod((s1+s2+s3+s4)/4, 1) -> 0.25
select name, s1, s2, s3, s4,
trunc((s1+s2+s3+s4)/4) +
case when mod((s1+s2+s3+s4)/4, 1) < 0.25 then 0
when mod((s1+s2+s3+s4)/4,1)>=0.25 and
mod((s1+s2+s3+s4)/4,1)<0.75
then 0.5
when mod((s1+s2+s3+s4)/4, 1) >= 0.75 then 1
end as total_s
from ielts_ning;
double calculate(double score){
int i = trunc(score);//整数
double j = mod(score, 1); //小数
double result = 0;
if (j < 0.25)
result = i;
else if ( j >= 0.25 && j < 0.75)
result = i + 0.5;
else if ( j >= 0.75)
result = i + 1;
return result;
}
create or replace function calculate_ning(score number)
return number
is
--定义变量
i number; --整数
j number; --小数
result number; --返回结果
begin
--程序体
i := trunc(score); --数据库中赋值:=
j := mod(score, 1);
if j < 0.25 then
result := 0;
elsif j >= 0.25 and j < 0.75 then
result := 0.5;
elsif j >= 0.75 then
result := 1;
end if;
return i + result;
end;
/
Function Created. 表示创建成功
Function Created with Compil...编译错误
SQL>show errors 检查错误信息
修改后, 再次执行, 直到创建成功为止
--函数建立以后,在sql语句中使用
select name, s1, s2, s3, s4, calculate_ning((s1 + s2 + s3 + s4) / 4) from ielts_ning;
--当数据库中提供的函数不够用时,可以创建自己的函数
--和java中定义自己的方法是一样的道理.
nvl length()
upper iterator()
round indexOf()
calcaulate_ning random()
..... code15To18()
第一部分: SQL 语句
第二部分: PL/SQL: 在数据库中编程
包括:funcation 函数
procedure 过程
package 包
trigger 触发器
select ename, job, salary,
case job when 'clerk' then salary * 1.05
when 'Programmer' then salary * 1.1
when 'Analyst' then salary * 1.15
else salary
end as new_sal
from emp_ning;
--用case实现
case when job = 'clerk' then salary * 1.05
when job = 'Programmer' then salary*1.1
when job = 'Analyst' then salary * 1.15
else salary
end
--用decode函数实现
select ename, job, salary,
decode(upper(job), 'CLERK', salary * 1.05,
'PROGRAMMER', salary * 1.1,
'ANALYST', salary * 1.15,
salary) as new_sal
from emp_ning;
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥124 优惠价:¥124.0 更多书籍 |