经典plsql例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
setserveroutput on;
--计算两个整数的和与这两个整数的差的商
declare
aint:=100;
bint:=200;
c number;
begin
c:=(a+b)/(a-a);
dbms_output.put_line(c);
exception
whenzero_divide then
dbms_output.put_line('除数不能为零!');
end;
/
declare
Num_sal number; --声明一个数值变量
Var_ename varchar2(20); --声明一个字符串变量
begin
select ename,sal into Var_ename,Num_sal from scott.emp where empno=7369; --检索指定的值并保存在变量中
dbms_output.put_line(Var_ename||'的工资是'||Num_sal); --输出变量的值end;
/
--简单的插入一条语句
create or replace procedure pro1 is
begin
insert into scott.emp(empno,ename)values(1111,'1111');
end;
/
exec pro1;
select * from scott.emp;
--删除一条语句(传参)
create procedure pro2(in_empno number) is
begin
delete from emp where empno=in_empno;
end;
/
--简单的插入一条语句(传参)
create or replace procedure pro3(in_empnonumber,in_ename varchar2) is
begin
insert into scott.emp(empno,ename)values(in_empno,in_ename);
end;
/
declare
--定义变量的格式是变量名称变量的类型
v_enamevarchar2(8);
begin
select ename into v_ename from emp where empno=&empno; --将查询到的值存入v_ename变量中
--输出v_ename
dbms_output.put_line('雇员名是'||v_ename);
end;
/
--将上面的块改成过程
create procedure pro4(v_in_empno number) is
v_enamevarchar2(8);
begin
selectename into v_ename from emp where empno=v_in_empno;
dbms_output.put_line('雇员名是'||v_ename);
end;
/
--编写一个过程,实现输入雇员名,新工资可以修改雇员的工资
create procedure pro5(in_ename in varchar2,in_newsal in number) is
begin
updateemp set sal=in_newsal where ename = in_ename;
end;
/
--编写一个过程,可以接受id和薪水,更新薪水,如果id不存在,需要在exception中捕获,并给出提示!
create or replace procedure pro6(in_empnonumber,in_sal number) is
v_enamevarchar2(32);
v_empno number;
begin
select empno into v_empno from emp where empno = in_empno; --此条语句为了实现在exception中可以抛出no_data_found
updateemp set sal = in_sal where empno = in_empno;
exception
whenno_data_found then
dbms_output.put_line('您输入的编号有误!');
end;
/
--编写一个函数,可以根据接受用户名并返回用户的年薪
create or replace function fun1(in_ename varchar2)
return number is
--定义一个变量来接受年薪
v_annual_sal number;
begin
select (sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=in_ename; returnv_annual_sal;
end;
select fun1('SMITH') from dual;
--定义一个包,该包有一个过程,该过程可以接收用户名和新的薪水(将用于通过用户名去更新薪水),
--还有一个函数,该函数可以接受一个用户名(将用于实现得到该用户的年薪是多少)
create or replace package mypackage1 is
--声明一个过程
procedure pro1(in_ename varchar2,in_newsal number);
--声明一个函数
function fun1(in_ename varchar2) return number;
end;
/
--编写一个包体的案例
create or replace package body mypackage1 is
--实现过程
procedure pro1(in_ename varchar2,in_newsal number) is
begin
updateemp set sal=in_newsal where ename = in_ename;
end;
--实现函数
function fun1(in_ename varchar2) return number is
v_annual_sal number;
begin select(sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=in_ename;
returnv_annual_sal;
end;