--创建过程
--语法形式如下
CREATE [OR REPLACE] PROCEDURE pname
[ (param1 [mode1] type1,
param2 [mode2] type2,
…)]
IS | AS
[variable1 type3 :=0;
variable2 type4 :=0;]
BEGIN PL/SQL Block
END [pname];
--OR REPLACE:表示如果同名对象已经存在就覆盖
--pname:过程名称
--param1、param2:形参名称
--mode1、mode2:参数模式,包括IN(输入参数 默认)、OUT(输出参数)、IN OUT(既是输入又是输出)
--type1、type2、type3、type4:参数数据类型
--variable1、variable2:局部变量
--PL/SQL Block:PL/SQL代码块
--例:假设现在要创建这样的过程,实现的功能是要给指定的(通过雇员编号指定)雇员加薪,如果雇员编号在7500以内加薪10%,雇员编号大于等于7500则加薪15%,创建存储过程的SQL语句如下:
CREATE OR REPLACE PROCEDURE raise_salary
(p_id IN emp.empno%TYPE)
IS
BEGIN
IF p_id >= 7500 THEN
BEGIN
UPDATE emp
SET sal = sal * 1.15
WHERE empno = p_id;
END;
END IF;
IF p_id < 7500 THEN
BEGIN
UPDATE emp
SET sal = sal * 1.10
WHERE empno = p_id;
END;
END IF;
END raise_salary;
--注意:
--1.end、end if 、end 过程名 后一定要加;号
--2.if里面的begin end 可以省略
--3.update执行语句后加;号
--4.emp.empno%TYPE 表示与emp表里的empno列数据类型相同
--整理后
CREATE OR REPLACE PROCEDURE raise_salary
(p_id IN number)
IS
BEGIN
IF p_id >= 7500 THEN
UPDATE emp
SET sal = sal * 1.15
WHERE empno = p_id;
else
UPDATE emp
SET sal = sal * 1.10
WHERE empno = p_id;
END IF;
END raise_salary;
--调用过程
--通过PL/SQL Dev查看Procedures文件夹,右键点击raise_salary过程,选择“Test”,在弹出的窗口中对应p_id这个形参输入实参然后选中弹出窗口中的代码进行执行即可
---------------------------------------------------------------------------
--创建函数
--创建函数的语法形式如下
CREATE [OR REPLACE] FUNCTION fname
[ (param1 [mode1] type1,
param2 [mode2] type2,
…)]
RETURN type //这一行后不能加;号
IS | AS
[variable1 type3 :=0;
variable2 type4 :=0;]
BEGIN
PL/SQL Block
END [fname]
--注意:
--1.end、end if 、end 过程名 后一定要加;号
--例1:假设要创建一个通过员工号获取上级管理者编号的函数,其SQL语句如下
CREATE OR REPLACE FUNCTION get_mgr_id
(p_id IN number)
RETURN NUMBER
IS
v_mgr_id number :=0;
BEGIN
SELECT mgr INTO v_mgr_id
FROM emp WHERE empno = p_id;
RETURN v_mgr_id;
END get_mgr_id;
--例2:函数功能:判断一个数是否能整除另一个数,可以返回1,不可以返回0
CREATE OR REPLACE FUNCTION division
(divisor IN number,
dividend IN number)
RETURN NUMBER
IS
BEGIN
IF mod(divisor,dividend)=0 then
RETURN 1;
ELSE
RETURN 0;
END IF;
END division;
----------------------------------------------------------------------------------------------------------------------------
--函数与过程的区别
--1.函数多用于计算,过程用于执行特定的任务
--2.函数声明为FUNCTION,过程声明为PROCEDURE
--3.函数需要描述返回类型,并且PL/SQL语句块中至少有一个有效的RETURN语句;过程无返回值,可通过输出参数返回多个值
--4.函数不能独立运行,过程可作为一个独立的PL/SQL语句运行
--5.在DML和DQL中可以调用函数,但不能调用过程