/*****************************存储过程****************
子程序:存储过程与函数
存储过程的语法:
create [or replace] procedure 存储过程的名称[(参数列表)]
is|as
本地变量声明
begin
---存储过程执行语句;
end [存储过程的名称];
针对参数的类型有三种:
in --输入参数(默认)
out ---输出参数
in out
******************************************/
------为员工编号为7369员工工资加10%
create or replace procedure pro_updateSal
is
begin
update emp set sal=sal*1.1 where empno=7369;
dbms_output.put_line('update!!');
end;
---调用存储过程
--1.在PL/SQL块中调用
begin
pro_updateSal();
end;
--2.使用 call--(只能调用无参数的存储过程)
call pro_updateSal();
--测试
select * from emp where empno=7369;
---3.在SQL/PLUS命令行中调用 execute
----根据输入员工编号,为对应员工加工资10%
create or replace procedure pro_updateSal(myempno in emp.empno%type)
is
begin
update emp set sal=sal*1.1 where empno=myempno;
dbms_output.put_line('update!!');
end;
---调用
declare
inputempno emp.empno%type;
begin
inputempno := &请输入编号;
pro_updateSal(inputempno);
end;
---根据输入的员工编号,获得员工的姓名
create or replace procedure pro_getEmpName(myempno in emp.empno%type,
myename out emp.ename%type)
is
begin
select ename into myename from emp where empno=myempno;
dbms_output.put_line('获得成功');
end;
--调用
declare
inputempno emp.empno%type;
----与sqlserver不需要使用out关键字来声明out类型的参数
myname emp.ename%type;
begin
inputempno := &请输入员工编号;
pro_getEmpName(inputempno,myname);
dbms_output.put_line('姓名:'||myname);
exception
when no_data_found
then dbms_output.put_line('输入员工编号错误或没有此数据');
end;
/***********************
存储过程的定义
create [or replace] procedure <过程名> [(参数列表)]
is | as
[局部变量声明]
begin
可执行语句
exception
异常处理语句
end [<过程名>];
**************************/
create or replace procedure updateSal(theno emp.empno%type,percent number)
is
cursor updateEmp(theEmpno emp.empno%type) is
select * from emp where empno=theempno for update;
updateRow emp%rowtype;
begin
open updateEmp(theno);
fetch updateEmp into updateRow;
update emp set sal = sal*(1+percent) where current of updateEmp;
dbms_output.put_line('数据修改完成');
close updateEmp;
end;
select empno,ename,sal from emp where empno=7369;
begin
updateSal(7369,0.2);
end;
--带参数的存储过程
create or replace procedure updateSal(theempno number,thesal in out number)
is
thejob emp.job%type;
tempsal emp.sal%type;
begin
select job,sal into thejob,tempsal from emp where empno = theempno;
if thejob = 'MANAGER' then
thesal := thesal*1.2;
end if;
update emp set sal = thesal where empno = theempno;
end;
declare
thesal emp.sal%type;
begin
thesal := 3000;
updateSal(7698,thesal);
dbms_output.put_line(thesal);
end;
/***********************************
函数的定义
create [or replace] function 函数名称
[(参数 [ { in | out | in out } ] 类型, ……
(参数 [ { in | out | in out } ] 类型 )]
return 返回类型 { is | as }
函数的执行语句
************************************/
create or replace function myadd(a int,b int)
return int
as
begin
return a + b;
end;
--在PL/SQL中调用必须要有一个参数接受函数的返回值
declare
result int := 100;
begin
result := myadd(32,16);
dbms_output.put_line('结果是:'||result);
end;
本文出自 “此刻打盹,你将做梦;..” 博客,转载请与作者联系!