存储过程
存储过程有输入和输出两种参数,
输入参数示例1
示例表:oracle的scott用户下的emp表
create or replace procedure
update_sal(vempno in number,vcount in number)
is
-- 声明变量记录当前工资
cur_sal number;
begin
-- 先查询涨工资前的工资
select sal into cur_sal from emp where empno = vempno;
dbms_output.put_line('涨工资前: '||cur_sal);
-- 更新工资
update emp set sal = sal + vcount where empno = vempno;
-- 涨工资后的工资
dbms_output.put_line('涨工资后: '||(cur_sal+vcount));
commit;
end;
备注:1.传入参数不能指定长度 2.参数使用驼峰命名,正例:sysCode,反例:sys_code
调用存储过程:
--调用方法一
call update_sal(7269,100)
--调用方法二
begin
update_sal(7369,100);
end;
输入参数示例二
create or replace procedure addSal(pempno in emp.empno%type)
as
pname emp.ename%type;
beforeSal emp.sal%type;
afterSal emp.sal%type;
begin
select ename,sal into pname,beforeSal from emp where empno=pempno;
afterSal:=beforeSal+100;
update emp set sal=afterSal where empno=pempno;
dbms_output.put_line('姓名:'||pname||'涨前工资:'||beforeSal||' '||'涨后工资:'||afterSal);
end;
输出参数示例
示例表:oracle的scott用户下的emp表
create or replace procedure year_sal(vempno in number,vyearsal out number)
as
begin
select sal*12+nvl(comm,0) into vyearsal from emp where empno=vempno;
end;
调用存储过程:
declare
yearsal number;
begin
year_sal(7369,yearsal);
dbms_output.put_line(yearsal);
end;
存储函数
存储函数只有输入参数,但必须有一个返回值,需要提前声明返回类型
create or replace function queryAnnalSal(pempno in number)
return number
as
psal emp.sal%type;
pcomm emp.comm%type;
begin
select sal,comm into psal,pcomm from emp where empno=pempno;
return psal*12+nvl(pcomm,0);
end;
调用存储函数:需要定义一个参数接收返回结果
declare
res number;
begin
res := queryAnnalSal(7369);
dbms_output.put_line(res);
end;