一、存储过程
1、语法如下:
create [or replace] Procedure 名称 as PLSQL子程序体;
2、栗子:
简单的栗子
1、创建
--第一个存储过程 打印一个Hello World create or replace PROCEDURE SayHelloWorld--如果存在就修改 as --说明部分 begin DBMS_OUTPUT.PUT_LINE('Hello World');--注意这里用单引号 end;
2、调用方式:
2.1、exec SayHelloWorld
2.2、begin
SayHelloWorld();
SayHelloWorld();
end;
/
命令打开Oracle,打印
带参数的存储过程
举例:为指定的同学,增加学费,并打印出增加前后的学分。
create or replace procedure raisesagrade(eno in number)--in 表示输入参数 as --定义一个变量 psal emp.sal%type; --emp是一张表 begin --得到学生添加前的学分 select sal into psal from EMP where empno=eno; --给学生增加学分 update emp set sal=sal+100 where empno=eno; --需不需要commit --一般不在存储过程或者存储函数中提交或者回滚,因为不能保证在恰当时候执行 --打印 dbms_output.put_line('增加前:'||psal|| '增加后:'||(psal+100)); end;
调用方式:
begin
raisesagrade(7369);
raisesagrade(7499);
commit;
end;
/
二、存储函数
1、创建语法如下:
create [or replace] FUNCTION 函数名(参数列表) return 函数值类型 AS PLSQL子程序体;
2、栗子
2.1、创建
--存储函数 查询某个员工的年收入 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+pcomm;--输出表达式中如果有空值,那么这个表达式最后就是为空值。 return psal*12+nvl(pcomm,0); end;
2.2、调用
DECLARE ENO NUMBER; v_Return NUMBER; BEGIN ENO:=7369; v_Return:=queryempincome(ENO=>ENO); DBMS_OUTPUT.PUT_LINE('v_Return='||v_Return); v_Return:=v_Return; END;
2.3、运行结果
v_Return=13200