PLSQL条件控制
/**
??if条件控制语句
*/
declare
?? ?sal number := 500;
?? ?comm number;
begin
?? ?if sal < 100 then
?? ? ? comm := 0;
?? ?elsif sal < 600 then
?? ? ? comm := sal*0.1;
?? ?elsif sal < 1000 then
?? ? ? comm := sal*0.2;
?? ?else
?? ? ? comm := sal*0.3;
?? ?end if;
?
?? ?dbms_output.put_line(comm);
?
end;
?
结果:50
?
/**
?? ?case条件控制语句
*/
declare?
?? ?v_sal number := 1000;
?? ?v_tax number;
begin
?? ?case
?? ? ? ? ?when v_sal < 1500 then
?? ? ? ? ? ? ? v_tax := v_sal*0.1;
?? ? ? ? ?when v_sal < 2500 then
?? ? ? ? ? ? ? v_tax := v_sal*0.2;
?? ? ? ? ?when v_sal < 3500 then
?? ? ? ? ? ? ? v_tax := v_sal*0.3;
?? end case;
?
?? dbms_output.put_line(v_tax);
end;
?
结果:100
?
/**
?? ?case条件控制语句
*/
declare
?? ?v_name varchar2(40);
begin
?? ?select ename into v_name from emp where empno='7788';
?
?? ?case v_name
?? ? ? ? when 'SCOTT' then
?? ? ? ? ? ? ?dbms_output.put_line('SCOTT');
?? ? ? ? when 'SMITH' then
?? ? ? ? ? ? ?dbms_output.put_line('SMITH');
?? ?end case;
end;
?
结果:SCOTT
?
/**
?? ?loop循环控制语句
*/
declare
?? ?v_index number := 10;
begin
?? ?loop
?? ? ? ?exit when v_index = 0; ? ?
?? ? ? ?insert into teacher values(v_index, 'name'||v_index, v_index); --向表中插入数据
?? ? ? ?v_index := v_index -1;
?? ?end loop;
?? ?commit;
end;
?
结果:向teacher表中插入10条数据
?
/**
?? ?while循环控制语句
*/
declare
?? ?v_index number := 10;
begin
?? ?while v_index > 0
?? ?loop
?? ? ? ? ?delete from teacher where id=v_index; --删除表中数据
?? ? ? ? ?v_index := v_index - 1;
?? ?end loop;
?? ?commit;
end;
?
结果:删除teacher表中插10条数据
?
/**
?? ?for循环控制语句
*/
begin
?? ?for i in 1..10 loop
?? ? ? ?dbms_output.put_line(i);
?? ?end loop;
?
?? ?for i in reverse 1..10 loop
?? ? ? ?dbms_output.put_line(i);
?? ?end loop;
end;
?
结果:先输出1到10,再输出10到1
?
/**
?? ?for嵌套循环控制语句
*/
?
declare?
?? ?result integer;
begin
?? ?<<outer>>
?? ?for i in 1..10 loop
?? ? ? ?<<inner>>
?? ? ? ?for j in 1..10 loop
?? ? ? ? ? ?dbms_output.put_line('i值:'||i||' j值:'||j);?
?? ? ? ? ? ?exit when j = 5; --跳出内层循环
?? ? ? ? ? ?exit outer when i = 5; --跳出外层循环
?? ? ? ?end loop;
?? ?end loop;
end;
?