PLSQL 中的存储过程和函数简单使用

来源:互联网 发布:js array键值对 编辑:程序博客网 时间:2024/05/29 04:12

以下的测试数据皆在以hr登录的 employees 及其相关表中

首先我们来写一个存储过程

存储过程

可以写出如下代码:

CREATE OR REPLACE PROCEDURE update_employee_salary(emp_id   IN NUMBER,                                                   emp_name OUT VARCHAR2,                                                   emp_sa   OUT NUMBER) ISBEGIN  UPDATE employees emp     SET emp.salary = emp.salary + 2000   WHERE emp.employee_id = emp_id;  SELECT first_name||' '||last_name,         salary    INTO emp_name,         emp_sa    FROM employees   WHERE employee_id = emp_id;EXCEPTION  WHEN no_data_found THEN    emp_name := 'E';    emp_sa   := 0;  WHEN OTHERS THEN    emp_name := 'N';    emp_sa   := 0;END update_employee_salary;

那么我们该如何使用这个存储过程呢?

--------题目1------------ 创建 Procedure update_employee_salary-- 输入参数 : employee_id-- 存储过程逻辑:根据employee_id 查出员工的信息,更新员工的工资,加 2000-- 输出结果: 返回 employee_namesalary-- 找不到: E 0  其他异常: N 0DECLARE  TYPE emp_rec_type IS RECORD(    emp_name employees.last_name%TYPE,    emp_sa   employees.salary%TYPE);  emp_rec emp_rec_type;BEGIN  -- 使用存储过程 --  update_employee_salary(110, emp_rec.emp_name, emp_rec.emp_sa);  ----------------  dbms_output.put_line(emp_rec.emp_name || ':' || emp_rec.emp_sa);END;

输出结果:

John Chen:12200


我们再来创建一个函数

函数

写出如下代码:

create or replace function get_employee_salary(emp_id IN NUMBER) return NUMBER is   sa NUMBER;begin   SELECT emp.salary   INTO sa   FROM employees emp   WHERE emp.employee_id=emp_id;   RETURN sa;EXCEPTION  WHEN no_data_found THEN    RETURN -1;  WHEN OTHERS THEN    RETURN -2;end get_employee_salary;

那么我们怎样使用函数呢?

--------题目2------------ 创建 Function get_employee_salary-- 输入参数 : employee_id-- 输出结果:当前用户的工资 找不到数据返回 -1 其他异常返回 -2SELECT get_employee_salary(100)  FROM dual;

以上就是有关存储过程和函数的简单使用了!