编程开发之--Oracle数据库--存储过程和存储函数(1)
1、存储过程和存储函数
描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程、存储函数
区别:存储函数可以通过return子句返回一个函数的值
(1)存储过程
语法:create [or replace] PROCEDURE 过程名(参数列表)
AS
PLSQL子程序体;
存储过程的调用方式:
a)exec/execute 过程名();
b)begin
过程名();
过程名();
end;
/
带参数的存储过程:
举例:为指定的员工涨100块钱工资,并且打印涨前以及涨后的工资。
在sql developer中创建带参数的存储过程:
create or replace PROCEDURE raisesalary(eno in number) as --定义一个变量保存涨前的薪水 psal emp.sal%type; begin --得到员工涨前的薪水 select sal into psal from emp where empno=eno; --给该员工涨100 update emp set sal=sal+100 where empno=eno; --注意:一般不在存储过程或者存储函数中,commit和rollback。 --打印 DBMS_OUTPUT.PUT_LINE('涨前:'||psal||'涨后:'||(psal+100)); end; /
使用sql developer调试调用plsql程序:
如果缺少权限,可以使用数据库超管赋予当前用户权限:
(2)存储函数
语法:
create [or replace] FUNCTION 函数名(参数列表)
return 函数值类型
AS
PLSQL子程序体;
举例:查询某员工的年收入
create or replace FUNCTION queryempincome(eno in number) return number as --定义一个变量保存员工的薪水和奖金 psal emp.sal%type; pcomm emp.comm%type; begin --得到员工的月薪和奖金 select sal,comm into psal,pcomm from emp where empno=eno; --直接返回年收入 return psal*12+nvl(pcomm,0); end; /
2、使用存储过程和使用存储函数的一条简单非必要原则:如果只有一个返回值,使用存储函数;如果有多个返回值,则使用存储过程;
都可以有多个out参数!
create or replace PROCEDURE queryempinform(eno in number, pename out varchar2, psal out number, pjob out varchar2) as begin --得到员工的姓名、月薪、职位 select ename,sal,job into pename,psal,pjob from emp where empno=eno; end;
问题思考:
a)如果查询某人的所有字段信息(并且字段比较多)?
b)如何返回多条符合条件的结果集,out参数可以返回结果集吗?