-- 自定义函数和存储过程的区别:
1.存储过程,功能强大,可以执行修改等一系列的操作,比如 UPDATE / INSERT / DELETE ,自定义函数是不可以的.
2.存储过程,可返回零或者多条记录,而自定义函数,必须返回一个值,且只能返回一个值
3.存储过程,其返回值不能被直接引用,而自定义函数,其返回值可以直接被引用.
4.存储过程,用 BEGIN END 语句独立执行,而自定义函数,在查询语句(DQL)和操作(DML)中调用.
-- 存储过程的语法:
CREATE OR REPLACE PROCEDURE 存储过程名 (参数1 in 参数类型1,参数2 in 参数类型2.....) -- 入参 是 IN ,出参 是 out
IS /*AS*/
声明变量或者游标
BEGIN
-- 执行体/逻辑体
END;
--存储过程可以不设置参数
案例:对 EMP 做一个备份表 EMP_TEST777
-- 创建一个存储过程并调用存储过程,并达到以下效果:
-- 通过存储过程传入一个员工编号,根据员工编号判断员工的对应薪资,然后给他提奖金
SAL <1000 COMM+300
1000-2000 COMM+200
>2000 COMM +10000
CREATE TABLE EMP_TEST777 AS SELECT * FROM EMP;
CREATE OR REPLACE PROCEDURE SP_UPCOMM(P_EMPNO NUMBER)
IS
V_SAL NUMBER;
BEGIN
-- 查询薪资放入到 变量中
SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = P_EMPNO;
IF V_SAL < 1000 THEN
UPDATE EMP_TEST777 SET COMM = NVL(COMM, 0) + 300 WHERE EMPNO = P_EMPNO;
ELSIF V_SAL BETWEEN 1000 AND 2000 THEN
UPDATE EMP_TEST777 SET COMM = NVL(COMM, 0) + 200 WHERE EMPNO = P_EMPNO;
ELSE
UPDATE EMP_TEST777
SET COMM = NVL(COMM, 0) + 10000
WHERE EMPNO = P_EMPNO;
END IF;
END SP_UPCOMM;
/
--调用存储过程
BEGIN
SP_UPCOMM(7369);
END;
SELECT * FROM EMP_TEST777;