--1、goto
--顺序控制语句
declare
i int:=1;
begin
loop
dbms_output.put_line('输出i='||i);
if i=5 then
goto end_loop;
end if;
i:=i+1;
end loop;
<<end_loop>>
dbms_output.put_line('循环结束');
end;
--2、null
--不会执行任何操作,可以直接将控制传递到下一条语句,
--使用null语句的主要好处是可以调高pl/sql的可读性
declare
v_sal emp.sal%type;
v_ename emp.ename%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&a;
if v_sal<3000 then
update emp set comm=comm+sal*0.1 where ename=v_ename;
else
null;
end if;
end;
--函数,包,触发器
--函数
--创建一个计算年薪的函数
--dual
create or replace function annual_income(name varchar2)
return number is
annual_salary number(7,2);
begin
select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;
return annual_salary;
end;
--函数的调用方法一
var income_number;
call annual_income('SCOTT') into:income;
print income;
--函数的调用方法二
select annual_income('KING') from dual;
--创建一个包 zxx_package
create or replace package zxx_package
is
procedure update_sal (name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;
--建包体
create or replace package body zxx_package
is
procedure update_sal (name varchar2,newsal number)
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2) return number
is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary
from emp where ename=name;
return annual_salary;
end;
end;
--调用自建包
call zxx_package.update_sal('FORD',2500);
备份地址: 【Oracle笔记(五)】