语法结构:
if(条件1) then
条件1成立执行代码块
elsif(条件2) then
条件2成立执行代码块
…
else
以上条件都不成立执行代码块
end if;
4.2 case语句
语法结构:
begin
case ‘&变量’
when ‘值1’ then 执行代码块1;
when ‘值2’ then 执行代码块2;
when ‘值3’ then 执行代码块3;
when ‘值4’ then 执行代码块4;
…
else 当以上值都不满足的时候执行代码块
end case;
end;
“&”:作用相等于Java里面的Scanner;
4.3循环控制语句
loop循环.
案例1:输出1-100之间所有数字;
declare
i number:=0;
begin
<> --给loop循环取别名:aloop
loop
dbms_output.put_line(i); --输出每一个值
i:=i+1; --i的值在叠加
exit aloop when i=101; --当i等于100的时候aloop循环退出
end loop;
end;
4.4 while循环
while循环.
案例:求1-100之间的和。
declare
i number(8):=0;
mysum number(8):=0;
begin
while(i<=100) loop
mysum:=mysum+i;
i:=i+1;
end loop;
dbms_output.put_line(mysum); --循环完成后输出最终求的和
end;
4.5 for循环
案例:求1-100之间的和。
declare
mysum number(7):=0;
begin
for i in 1…100 loop
mysum:=mysum+i;
end loop;
dbms_output.put_line(mysum);
end;
五、异常处理
5.1预定义异常/系统自带异常.
当PL/SQL程序违反Oracle规则或超越系统限制时隐式引发。
5.1.1 too_many_rows.
too_many_rows:行太多。意为:实际返回的行数超出请求的行数。
异常演示:
declare
sid number:=7499;
mysum emp%rowtype;
begin
select * into mysum from emp;
dbms_output.put_line(‘名字是:’||mysum.ename||‘,岗位是:’||mysum.job);
end;
处理异常:
declare
sid number:=7499;
mysum emp%rowtype;
begin
select * into mysum from emp;
dbms_output.put_line(‘名字是:’||mysum.ename||‘,岗位是:’||mysum.job);
exception when too_many_rows then
dbms_output.put_line(‘太多行’);
end;
5.1.2 no_data_found.
no_data_found:行太少。意为:未查询到数据。
异常演示:
declare
sid number:=0000;
mysal emp.sal%type;
begin
select sal into mysal from emp where empno=sid;
if(mysal>3500) then
dbms_output.put_line(‘要纳税’);
else
dbms_output.put_line(‘要努力’);
end if;
end;
处理异常:
declare
sid number:=0;
mysum emp%rowtype;
begin
select * into mysum from emp where empno=sid;
dbms_output.put_line(‘名字是:’||mysum.ename||‘,岗位是:’||mysum.job);
exception when no_data_found then
dbms_output.put_line(‘行太少’);
end;
5.2自定义异常.
语法:
declare
异常变量 exception;
begin
if(触发异常条件) then
raise 异常变量;
else
未触发异常执行的代码块
end if;
exception when 异常变量 then
触发异常执行的代码块
end;
案例演示:–根据工号查询工资,如果工资低于3500则抛出异常:‘你的工资太低了’。否则就输出:‘你的工资可以哟’。
declare
sid number:=7369;
mye exception;
mysal emp.sal%type;
begin
select sal into mysal from emp where empno=sid;
if(mysal<3500)then
raise mye;
else
dbms_output.put_line(‘你的工资可以哟’);
end if;
exception when mye then
dbms_output.put_line(‘你的工资太低了’);
end;
六、自定义函数
语法结构
create [or replace] function 函数名 (参数1,参数2)
return 返回值类型 is|as
定义返回变量(要取长度);
begin
函数要执行的sql语句
return 变量名;
end;
案例演示:
定义函数:通过学号返回学生的名字。
create or replace function
fun_name(sid number) --函数名,带参数
return varchar2 is --返回值的类型,注意这里不能指定数据类型的长度
sname varchar2(10); --定义返回的变量(要取长度)
begin
select ename into sname from emp where empno=sid;
return sname; --返回定义的变量sname
end;
调用函数:select fun_name(7369) from dual;