创建存储过程
/* =========================================================== | 创建存储过程 ============================================================ */ CREATE OR REPLACE PROCEDURE ADD_EMPLOYEE (ENO NUMBER, --输入参数,雇员编号 NAME VARCHAR2, --输入参数,雇员名称 SALARY NUMBER, --输入参数,雇员薪水 DNO NUMBER,--输入参数,雇员部门编号 JOB VARCHAR2 DEFAULT 'CLERK' --输入参数,雇员工种默认'CLERK' ) IS BEGIN INSERT INTO EMPLOYEE (EMPNO, ENAME, SAL, JOB, DEPTNO) VALUES (ENO, NAME, SALARY, JOB, DNO); END; /* =========================================================== | 创建存储过程——增加异常处理 ============================================================ */ CREATE OR REPLACE PROCEDURE ADD_EMPLOYEE (ENO NUMBER, --输入参数,雇员编号 NAME VARCHAR2, --输入参数,雇员名称 SALARY NUMBER, --输入参数,雇员薪水 DNO NUMBER, --输入参数,雇员部门编号 JOB VARCHAR2 DEFAULT 'CLERK' --输入参数,雇员工种默认'CLERK' ) IS BEGIN IF LENGTH(eno)<4 THEN raise_application_error(-20000,'员工编号不能小于4位数。'); END IF; INSERT INTO EMPLOYEE (EMPNO, ENAME, SAL, JOB, DEPTNO) VALUES (ENO, NAME, SALARY, JOB, DNO); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLERRM); RAISE; END; --查看源代码 select text from user_source where name='ADD_EMPLOYEE'; DROP PROCEDURE ADD_EMPLOYEE;
规范化存储过程
/* =========================================================== | 按照推荐规则修改。 ============================================================ */CREATE OR REPLACE PROCEDURE add_employee1( eno employee.empno%type, --输入参数,雇员编号 name employee.ename%type, --输入参数,雇员名称 salary employee.sal%type, --输入参数,雇员薪水 job employee.job%type DEFAULT 'CLERK', --输入参数,雇员工种默认'CLERK' dno employee.deptno%type, --输入参数,雇员部门编号 on_Flag OUT number, --执行状态 os_Msg OUT VARCHAR2 --提示信息 ) IS e_eno EXCEPTION; BEGIN IF LENGTH(eno)<4 THEN RAISE e_eno; END IF; INSERT INTO employee (empno,ename,sal,job,deptno)VALUES (eno,name,salary,job, dno); on_Flag:=1; os_Msg:='添加成功'; EXCEPTION WHEN e_eno THEN on_Flag:=-1; os_Msg:='员工编号不能小于4位数。'; WHEN DUP_VAL_ON_INDEX THEN on_Flag:=-2; os_Msg:='该雇员已存在。'; WHEN OTHERS THEN -- on_Flag:=-3; -- os_Msg:='其他错误,与管理员联系。'; on_Flag:=SQLCODE; os_Msg:=SQLERRM; END; DECLARE on_Flag NUMBER; os_Msg VARCHAR2(100); BEGIN --按位置传递参数 add_employee1(2112,'MARY',2000,'MANAGER',10,on_Flag,os_Msg); dbms_output.put_line(on_Flag||os_Msg); END;
调用参数
CREATE OR REPLACE PROCEDURE P( A PLS_INTEGER, -- IN by default B IN PLS_INTEGER, C OUT PLS_INTEGER, D IN OUT NUMBER ) IS BEGIN dbms_output.put_line(c); dbms_output.put_line(d); C := A + 10; -- Assign value to OUT parameter D := 10/B; -- Assign value to IN OUT parameter END; DECLARE aa CONSTANT PLS_INTEGER := 1; bb PLS_INTEGER := 2; cc PLS_INTEGER := 3; dd NUMBER := 4; BEGIN p(aa,bb,cc,dd); DBMS_OUTPUT.PUT_LINE('After invoking procedure p:'); DBMS_OUTPUT.PUT_LINE('aa = '||aa); DBMS_OUTPUT.PUT_LINE('bb = '||bb); DBMS_OUTPUT.PUT_LINE('cc = '||cc); DBMS_OUTPUT.PUT_LINE('dd = '||dd); END;
调用存储过程
/* =========================================================== || PL/SQL调用存储过程 || ENO NUMBER, --输入参数,雇员编号 || NAME VARCHAR2, --输入参数,雇员名称 || SALARY NUMBER, --输入参数,雇员薪水 || DNO NUMBER, --输入参数,雇员部门编号 || JOB VARCHAR2 DEFAULT 'CLERK' --输入参数,雇员工种默认'CLERK' ============================================================ */ BEGIN /*按位置指定*/ add_employee(2111,'MARY',2000,10,'MANAGER'); /*按名字指定*/ add_employee(dno=>10,NAME=>'MARY',salary=>2000,eno=>2112, job=>'MANAGER'); /*混合方法指定*/ add_employee(2113,dno=>10,NAME=>'MARY',salary=>2000,job=>'MANAGER'); END; --带默认参数 BEGIN /*按位置指定*/ add_employee(3111,'MARY',2000,10); /*按名字指定*/ add_employee(dno=>10,NAME=>'MARY',salary=>2000,eno=>3112); /*混合方法指定*/ add_employee(3113,dno=>10,NAME=>'MARY',salary=>2000); END; --带异常处理 DECLARE EMP_20000 EXCEPTION; PRAGMA EXCEPTION_INIT(EMP_20000, -20000); EMP_NULL_ERROR EXCEPTION; --声明异常变量 PRAGMA EXCEPTION_INIT(EMP_NULL_ERROR, -1400); --非预定义异常,前提:deptno列非空。插入空值会报错 EMP_NO_DEPTNO EXCEPTION; --声明异常变量 PRAGMA EXCEPTION_INIT(EMP_NO_DEPTNO, -2291); --非预定义异常,前提:deptno列建立外键约束,插入部门编号不在部门表中会报错 BEGIN /*异常员工编号位数小于4位*/ add_employee(61,'MARY',2000,10,'MANAGER'); /*异常部门不存在*/ -- add_employee(4111,'MARY',2000,66,'MANAGER'); /*异常部门为空*/ -- add_employee(4111,'MARY',2000,null,'MANAGER'); /*异常雇员编号重复*/ --add_employee(2111,'MARY',2000,10,'MANAGER'); EXCEPTION WHEN EMP_20000 THEN DBMS_OUTPUT.PUT_LINE(SQLERRM(-20000)); WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('雇员编码不能重复'); WHEN emp_null_error THEN DBMS_OUTPUT.PUT_LINE('部门编码不能为空'); WHEN emp_no_deptno THEN DBMS_OUTPUT.PUT_LINE('不存在该部门编号'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('出现了其他异常错误'); END;
相关推荐
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
oracle 存储过程实例 oracle存储过程实例
oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel
oracle 存储过程 unwrap 图形解密 工具
ibatis调用oracle存储过程分页
可以将SQL Server存储过程转为oracle存储过程的工具
oracle存储过程加密破解 0
帆软报表调用Oracle存储过程如果存储过程定义中没有参数,但是设计器中缺弹出一个storeParameter1参数的解决插件
oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记
oracle 存储过程批量提交
使用java实现oracle存储过程。 共有3个小例子。实现的功能 1、无返回值的存储过程 如 insert 2、有返回值的存储过程(非列表)select id from tab 3、返回列表 如:select * from tab 顺便鄙视下csdn,作为一个it...
oracle存储过程学习经典入门 非常好的 初学者必看
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO ...
oracle 存储过程 函数 dblink 绝对对工作和平时学习有价值的资料。针对个人具体情况做修改即可使用
Oracle存储过程中使用临时表 会话级临时表 事务级临时表
oracle 存储过程实例 oracle 存储过程实例 oracle 存储过程实例 oracle 存储过程实例
行业内Oracle存储过程最基本的开法规范,适合oracle入门小白学习
4、开发指南:《Oracle存储过程入门指南&100+种真实业务场景存储过程实例.pdf》,可以帮助初学者系统学习。 5、资源包括“通用存储过程整理” 和 “真实业务存储过程整理” 两部分,通用适合各种系统,可以无缝隙...
linux系统中使用shell脚本对oracle存储过程进行编译
Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码