【Oracle 11g】(七) 存储过程
注:存储过程的变量定义前面没有 DECLARE
1、定义存储过程,给部门表插入两条数据80 财务部,81 市场部
--(1)创建存储过程 CREATE PROCEDURE myproc AS BEGIN DELETE FROM dept WHERE deptno IN (80, 81); INSERT INTO dept(deptno, dname) VALUES(80, '财务部'); INSERT INTO dept(deptno, dname) VALUES(81, '市场部'); COMMIT; END;

2、执行存储过程
1)通过命令的方式--创建Command Windows
SQL> execute myproc;
PL/SQL procedure successfully completed

2) PL/SQL的方式
--第二种方式:PL/SQL BEGIN myproc; END;
3、编译
如果语法有错误,编译不会成功,在存储过程上会有个小红点,可以右键选择“编辑“进行调试。
4、参数
1)IN(默认,可加也可不加)
创建存储过程:
CREATE OR REPLACE PROCEDURE find_emp(e_no IN NUMBER) AS /******************************************** 程序功能: 输入员工编号,打印员工姓名 业务逻辑: 查询语句 开发日期: 2021-08-31 开发人员: xinRong 源 表: emp 目 标 表: ********************************************/ v_ename VARCHAR2(40); BEGIN SELECT ename INTO v_ename FROM emp WHERE empno = e_no; dbms_output.put_line(v_ename); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('没有找到员工信息'); END;
执行存储过程:
--调用存储过程 PL/SQL BEGIN find_emp(77); END;
2)OUT
创建存储过程:
CREATE OR REPLACE PROCEDURE find_emp2(e_no NUMBER, p_ename OUT VARCHAR2) --参数只有类型定义没有长度设置 AS /******************************************** 程序功能: 根据输入的员工编号,返回员工姓名 业务逻辑: 测试OUY参数的使用 开发日期: 2021-08-31 开发人员: xinRong 源 表: emp 目 标 表: ********************************************/ v_ename emp.ename%TYPE; BEGIN SELECT ename INTO v_ename FROM emp WHERE empno = e_no; p_ename := v_ename; EXCEPTION WHEN no_data_found THEN dbms_output.put_line('没有找到该员工信息'); END;
执行存储过程:
--调用存储过程 PL/SQL BEGIN e_name VARCHAR2(40); find_emp2(7788, e_name); dbms_output.put_line(e_name); END;
3)IN OUT
创建存储过程:
CREATE OR REPLACE PROCEDURE mp(n1 IN OUT NUMBER, n2 IN OUT NUMBER) --参数只有类型定义没有长度设置 AS /******************************************** 程序功能: 将输入的两个参数互换值 业务逻辑: 测试IN OUT参数的使用 开发日期: 2021-08-31 开发人员: xinRong 源 表: emp 目 标 表: ********************************************/ temp NUMBER; BEGIN temp:=n1; n1:=n2; n2:=temp; END;
执行存储过程:
--调用存储过程 DECLARE a NUMBER := 10; b NUMBER := 20; BEGIN mp(a, b); --既做输入也做输出 dbms_output.put_line(a); dbms_output.put_line(b); END;
浙公网安备 33010602011771号