PL/SQL存储过程

-- 自定义函数和存储过程的区别:

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;

猜你喜欢

转载自blog.csdn.net/weixin_57024726/article/details/133291776