- 浏览: 237361 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (268)
- oracle (15)
- 设计模式 (4)
- java (16)
- 线程(Thread) (1)
- 常用 (4)
- PL/SQL (1)
- SWING (10)
- 架构 (4)
- 正则表达式 (5)
- Linux (16)
- PostgreSQL (1)
- FTP (1)
- mysql (4)
- TOMCAT (5)
- 素材 (2)
- Hibernate (3)
- 报表打印 (1)
- 高并发,大数据量处理 (6)
- UML (1)
- memcache (3)
- JMF (1)
- 通信 (2)
- window常见问题处理 (5)
- eclipse (7)
- 数据库 (2)
- java内存 (4)
- maven (4)
- Spring (12)
- JavaScript (22)
- nodejs (5)
- OSGI (1)
- 其他 (1)
- 企业开发平台 (1)
- web页面懒加载 (3)
- VMware (2)
- hadoop (2)
- hadoop.hadoop学习笔记 (1)
- web前端 (32)
- vim (6)
- CSS (21)
- web前端.widget (2)
- Activiti (1)
- BPMN (1)
- Cookie (1)
- nigix (1)
- SVN (1)
最新评论
-
woodding2008:
太棒了
用一段代码演示马云双十一晚会上玩的纸牌魔术 -
nihaonihao1987:
[b][/b]
特别响、非常近——BPMN2新规范与Activiti5 -
coosummer:
推荐使用http://buttoncssgenerator.c ...
CSS Button -
tw_wangzhengquan:
ahua186186 写道compile 'com.oracl ...
ext4,spring,hibernate构建企业开发平台 -
ahua186186:
compile 'com.oracle:ojdbc14:10. ...
ext4,spring,hibernate构建企业开发平台
/*
预定义例外
*/
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&no;
dbms_output.put_line('雇员名:'||v_ename);
exception
when TOO_MANY_ROWS THEN
dbms_output.put_line('查询只能返回单行');
when NO_DATA_FOUND then
dbms_output.put_line('雇员号不正确');
end;
--ACCESS_INTO_NULL
create type emp_type as object
(name varchar2(10),sal number(6,2));
GO
declare
emp emp_type;
begin
emp.name:='scott';
exception
when access_into_null then
dbms_output.put_line('首先初始化对象emp');
end;
--CASE_NOT_FOUND
undef no
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=&&no;
dbms_output.put_line('v_sal=='||v_sal);
case
when v_sal<1000 then
dbms_output.put_line('小于1000');
when v_sal<2000 then
dbms_output.put_line('小于2000');
when v_sal<3000 then
dbms_output.put_line('小于3000');
end case;
exception
when case_not_found then
dbms_output.put_line('在Case语句中缺少与'||v_sal||'相关的事件');
end;
--COLLECTION_IS_NULL
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type;
begin
select ename into ename_table(2) from emp where empno=&no;
dbms_output.put_line('雇员名:'||ename_table(2));
exception
when collection_is_null then
dbms_output.put_line('必须使用构造方法初始化集合元素');
end;
--CURSOR_ALREADY_OPEN
declare
cursor emp_cursor is select * from emp;
begin
open emp_cursor;
for emp_record in emp_cursor loop
dbms_output.put_line('雇员:'||emp_record .ename);
end loop;
exception
when cursor_already_open then
dbms_output.put_line('游标已打开');
end;
--DUM_VAL_ON_INDEX
begin
update dept set deptno=&new_no where deptno=&old_no;
exception
when dup_val_on_index then
dbms_output.put_line('在deptno上不能出现重复值');
end;
--INVALID_CURSOR
declare
cursor emp_cursor is select * from emp;
emp_record emp_cursor%rowtype;
begin
fetch emp_cursor into emp_record;
exception
when invalid_cursor then
dbms_output.put_line('请检查游标是否已经打开');
end;
--INVALID_NUMBER
begin
update emp set sal=sal+'1b';
exception
when invalid_number then
dbms_output.put_line('输入的数字不正确');
end;
--NO_DATA_FOUND
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where lower(ename)=lower('&name');
exception
when no_data_found then
dbms_output.put_line('不存在该雇员');
end;
--TOO_MANY_ROWS
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where sal>2000;
exception
when too_many_rows then
dbms_output.put_line('返回多行,需用集合变量');
end;
--ZERO_DIVIDE
declare
num1 int:=100;
num2 int:=0;
num3 number(6,2);
begin
num3:=num1/num2;
exception
when zero_divide then
dbms_output.put_line('分母不能为零');
end;
--SUBSCRIPT_BEYOND_COUNT
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('scott','marry');
dbms_output.put_line(emp_array(3));
exception
when subscript_beyond_count then
dbms_output.put_line('超出下标范围');
end;
--SUBSCRIPT_OUTSIDE_LIMIT
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('scott','marry');
dbms_output.put_line(emp_array(-1));
exception
when subscript_outside_limit then
dbms_output.put_line('下标不能为负');
end;
--VALUE_ERROR
declare
v_ename varchar2(2);
begin
select ename into v_ename from emp where empno=&&no;
dbms_output.put_line(v_ename);
exception
when value_error then
dbms_output.put_line('变量尺寸不足');
end;
/*
非预定义例外
*/
--
declare
e_integrity exception;
pragma exception_init(e_integrity,-2291);
begin
update emp set deptno=&detpno where empno=&empno;
exception
when e_integrity then
dbms_output.put_line('该部门不存在');
end;
/*
自定义例外
*/
declare
e_integrity exception;
pragma exception_init(e_integrity,-2291);
e_no_employee exception;
begin
update emp set deptno=&detpno where empno=&empno;
if sql%notfound then
raise e_no_employee;
end if;
exception
when e_integrity then
dbms_output.put_line('该部门不存在');
when e_no_employee then
dbms_output.put_line('该雇员不存在');
end;
/**
例外函数
*/
-- SQLCODE,SQLERRM
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where sal=&&v_sal;
dbms_output.put_line('雇员:'+v_ename);
exception
when no_data_found then
dbms_output.put_line('不存在工资为'||&v_sal||'的雇员');
when others then
dbms_output.put_line('错误号:'||sqlcode);
dbms_output.put_line(sqlerrm);
end;
--RAISE_APPLICATION_ERROR
create or replace procedure raise_comm
(eno number,commission number)
is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where empno=eno;
if v_comm is null then
raise_application_error(-20001,'该雇员无补助');
end if;
exception
when no_data_found then
dbms_output.put_line('该雇员不存在');
end;
/*
编译警告
*/
create or replace procedure dead_code as
x number:=10;
begin
if x=10 then
x:=20;
else
x:=100;--(死代码,永远不执行)
end if;
end dead_code ;
alter session set plsql_warnings='enable:informational';
alter procedure dead_code compile;
show errors;
预定义例外
*/
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno=&no;
dbms_output.put_line('雇员名:'||v_ename);
exception
when TOO_MANY_ROWS THEN
dbms_output.put_line('查询只能返回单行');
when NO_DATA_FOUND then
dbms_output.put_line('雇员号不正确');
end;
--ACCESS_INTO_NULL
create type emp_type as object
(name varchar2(10),sal number(6,2));
GO
declare
emp emp_type;
begin
emp.name:='scott';
exception
when access_into_null then
dbms_output.put_line('首先初始化对象emp');
end;
--CASE_NOT_FOUND
undef no
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=&&no;
dbms_output.put_line('v_sal=='||v_sal);
case
when v_sal<1000 then
dbms_output.put_line('小于1000');
when v_sal<2000 then
dbms_output.put_line('小于2000');
when v_sal<3000 then
dbms_output.put_line('小于3000');
end case;
exception
when case_not_found then
dbms_output.put_line('在Case语句中缺少与'||v_sal||'相关的事件');
end;
--COLLECTION_IS_NULL
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type;
begin
select ename into ename_table(2) from emp where empno=&no;
dbms_output.put_line('雇员名:'||ename_table(2));
exception
when collection_is_null then
dbms_output.put_line('必须使用构造方法初始化集合元素');
end;
--CURSOR_ALREADY_OPEN
declare
cursor emp_cursor is select * from emp;
begin
open emp_cursor;
for emp_record in emp_cursor loop
dbms_output.put_line('雇员:'||emp_record .ename);
end loop;
exception
when cursor_already_open then
dbms_output.put_line('游标已打开');
end;
--DUM_VAL_ON_INDEX
begin
update dept set deptno=&new_no where deptno=&old_no;
exception
when dup_val_on_index then
dbms_output.put_line('在deptno上不能出现重复值');
end;
--INVALID_CURSOR
declare
cursor emp_cursor is select * from emp;
emp_record emp_cursor%rowtype;
begin
fetch emp_cursor into emp_record;
exception
when invalid_cursor then
dbms_output.put_line('请检查游标是否已经打开');
end;
--INVALID_NUMBER
begin
update emp set sal=sal+'1b';
exception
when invalid_number then
dbms_output.put_line('输入的数字不正确');
end;
--NO_DATA_FOUND
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where lower(ename)=lower('&name');
exception
when no_data_found then
dbms_output.put_line('不存在该雇员');
end;
--TOO_MANY_ROWS
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where sal>2000;
exception
when too_many_rows then
dbms_output.put_line('返回多行,需用集合变量');
end;
--ZERO_DIVIDE
declare
num1 int:=100;
num2 int:=0;
num3 number(6,2);
begin
num3:=num1/num2;
exception
when zero_divide then
dbms_output.put_line('分母不能为零');
end;
--SUBSCRIPT_BEYOND_COUNT
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('scott','marry');
dbms_output.put_line(emp_array(3));
exception
when subscript_beyond_count then
dbms_output.put_line('超出下标范围');
end;
--SUBSCRIPT_OUTSIDE_LIMIT
declare
type emp_array_type is varray(20) of varchar2(10);
emp_array emp_array_type;
begin
emp_array:=emp_array_type('scott','marry');
dbms_output.put_line(emp_array(-1));
exception
when subscript_outside_limit then
dbms_output.put_line('下标不能为负');
end;
--VALUE_ERROR
declare
v_ename varchar2(2);
begin
select ename into v_ename from emp where empno=&&no;
dbms_output.put_line(v_ename);
exception
when value_error then
dbms_output.put_line('变量尺寸不足');
end;
/*
非预定义例外
*/
--
declare
e_integrity exception;
pragma exception_init(e_integrity,-2291);
begin
update emp set deptno=&detpno where empno=&empno;
exception
when e_integrity then
dbms_output.put_line('该部门不存在');
end;
/*
自定义例外
*/
declare
e_integrity exception;
pragma exception_init(e_integrity,-2291);
e_no_employee exception;
begin
update emp set deptno=&detpno where empno=&empno;
if sql%notfound then
raise e_no_employee;
end if;
exception
when e_integrity then
dbms_output.put_line('该部门不存在');
when e_no_employee then
dbms_output.put_line('该雇员不存在');
end;
/**
例外函数
*/
-- SQLCODE,SQLERRM
declare
v_ename emp.ename%type;
begin
select ename into v_ename from emp where sal=&&v_sal;
dbms_output.put_line('雇员:'+v_ename);
exception
when no_data_found then
dbms_output.put_line('不存在工资为'||&v_sal||'的雇员');
when others then
dbms_output.put_line('错误号:'||sqlcode);
dbms_output.put_line(sqlerrm);
end;
--RAISE_APPLICATION_ERROR
create or replace procedure raise_comm
(eno number,commission number)
is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where empno=eno;
if v_comm is null then
raise_application_error(-20001,'该雇员无补助');
end if;
exception
when no_data_found then
dbms_output.put_line('该雇员不存在');
end;
/*
编译警告
*/
create or replace procedure dead_code as
x number:=10;
begin
if x=10 then
x:=20;
else
x:=100;--(死代码,永远不执行)
end if;
end dead_code ;
alter session set plsql_warnings='enable:informational';
alter procedure dead_code compile;
show errors;
发表评论
-
ORACLE函数大全
2014-03-26 17:29 585http://www.iteye.com/topic/602 ... -
oracle中date和timestamp的区别
2013-12-15 16:04 990转:http://oracle.chinaitlab.com ... -
oracle数据导入
2013-06-12 11:34 840A、有一个比较麻烦但保证成功的方法。1、在本地创建一个Acc ... -
oracle 客户端无法连接到服务器解决办法(转客户端穿越防火墙)
2013-06-12 11:28 819今天尝试连接到oracle服务器,总没有成功,后来发现是服务器 ... -
Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
2013-06-12 11:26 865转:http://www.cnblogs.com/jason ... -
oracle修改表、增加列、删除列、修改列
2013-06-12 11:22 8801.增加列 ALTER TABLE table_name ... -
Oracle设置主键自增
2013-06-12 11:12 816Oracle中没有自增字段,可通过序列+触发器间接实现,cm ... -
Oracle创建用户及表空间
2011-01-05 22:28 1120登陆 sqlplus / as sysdba 接下来,我 ... -
oracle 实现 split 函数 (返回数组)
2010-09-21 15:30 1223功能描述:用指定分隔符切割输入的字符串,返回一维数组,每个数组 ... -
oracle触发器
2010-09-20 16:24 1023/* 语句触发器 */ --before触发器 create ... -
oracle存储过程
2010-09-19 17:38 879--不带参数的存储过程 create or replace p ... -
oracle游标变量
2010-09-19 17:37 1031--1 declare type emp_curs ... -
oracle游标
2010-09-19 17:32 930--fetch ... into declare cursor ... -
oracle控制语句
2010-09-19 17:28 905--控制语句 --1 declare v_ ...
相关推荐
以下是对“16Oracle的例外处理”中涉及的一些关键概念和用法的详细解释: 1. **异常(Exception)**:在Oracle中,异常是程序执行期间发生的非正常事件,比如SQL错误、逻辑错误或资源问题。异常可以通过异常处理...
### Oracle异常处理详解 在Oracle数据库的PL/SQL编程中,异常处理是非常重要的一个环节,它可以帮助我们更好地控制程序流程,提高程序的健壮性和稳定性。本文将详细解析Oracle PL/SQL中的各种异常类型及其应用场景...
下面通过一个小案例演示如果不处理例外看会出现什么情况? 编写一个存储过程,可接收雇员的编号,并显示该雇员的姓名。 sql代码如下: SET SERVEROUTPUT ON; DECLARE V_ENAME EMP.ENAME%TYPE; BEGIN SELECT ENAME...
3. 修改每个节点下的 tnsnames.ora 文件,添加 Oracle 例外进程监听,红色部分要和 listener.ora 文件保持一致,只能保留一个 EXTPROC_CONNECTION_DATA: EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_...
总的来说,Oracle PL/SQL的异常处理机制是提高代码质量和健壮性的关键工具,它使得开发者能够优雅地处理错误,确保程序在异常情况下的稳定运行。通过熟练掌握异常处理,开发者可以编写出更可靠、更易维护的数据库...
- **处理预定义例外**:处理Oracle预先定义好的异常。 - **非预定义例外**:自定义异常的处理。 ### Oracle的视图 这部分介绍了Oracle中的视图概念及其使用方法。 通过以上内容,可以了解到Oracle数据库的强大功能...
10. **例外**:异常处理是处理运行时错误的关键部分。Oracle提供了BEGIN...EXCEPTION END结构来捕获和处理错误,确保程序的健壮性。 11. **Java调用存储过程和存储函数**:Java开发者可以使用JDBC(Java Database ...
Oracle 10g 系统管理员简明教程目录 本教程目录涵盖了 Oracle 10g 系统管理员需要掌握的知识点,包括 Oracle 10g...* 异常处理:包括预定义的例外处理、用 EXCEPTION INIT 产生例外、用户定义的例外处理等方面的介绍。
首先,Java通过JDBC API与各种数据库进行交互,Oracle也不例外。JDBC是Java标准的一部分,它提供了一套API,使得Java程序可以连接到数据库,执行SQL语句,处理结果集等。要连接到Oracle数据库,我们需要以下步骤: ...
这一过程对于所有操作系统都是通用的,但在少数特定情况下可能有所例外,具体情况需参考相关的Oracle文档。 11gR2 (11.2) 支持多种工具和方法来实现数据库升级: - **数据库升级助手 (DBUA: Database Upgrade ...
例外处理 - **捕获异常**:使用`EXCEPTION`块捕获并处理异常。 - **自定义异常**:使用`EXCEPTION`关键字定义自定义异常。 - **示例**: ```plsql DECLARE e_not_found EXCEPTION; BEGIN RAISE e_not_found; ...
19. 例外处理:讲述了在PL/SQL程序中如何处理异常情况,以确保程序的健壮性。 20. Oracle的视图:介绍了视图的概念和作用,以及视图与其它数据库系统(如MySQL、SQL Server)的比较。 21. Oracle认证:文档提到了...
8. **例外处理**: - `EXCEPTION`部分用于捕获和处理运行时错误。例如,如果在尝试插入时发生唯一键冲突,可以捕获并处理`ORA-00001`异常: ```sql DECLARE v_msg VARCHAR2(100); BEGIN INSERT INTO t_table ...
Toad for Oracle 的目标是提高数据库管理员的工作效率,并帮助他们更好地处理复杂的数据库管理任务。 ### 二、Toad for Oracle 9.7 版本特点 9.7 版本作为 Toad for Oracle 的一个特定版本,具有以下特点: 1. **...
### Oracle存储过程使用知识点 #### 一、存储过程概述 - **定义**:存储过程(Stored ...存储过程不仅可以帮助我们提高数据库操作的效率,还能简化复杂的业务逻辑处理,是Oracle数据库开发者不可或缺的一部分。
2011年度的Oracle数据库技术大会也不例外,通过这些演讲PPT,我们可以深入了解当年Oracle数据库的关键发展和创新。 首先,Oracle数据库的核心特性之一是其强大的数据存储和管理能力。在2011年的大会上,可能涵盖了...
4. **数据问题**:订单数据可能不完整或有误,导致审批流程无法正常处理。 5. **系统故障**:Oracle EBS系统本身可能出现临时的技术问题,影响审批流程的执行。 解决此类问题通常需要进行以下步骤: 1. **检查审批...
当这些对象发生变化时,Oracle会自动处理视图的依赖关系。例如,如果删除了一个视图的基表,然后重建该表,Oracle会检查新建的表是否符合视图定义的要求,并评估视图的有效性。 #### 可更新连接视图 连接视图是指...
通过PL/SQL,可以与数据库交互,处理复杂的业务规则。 4. **Forms and Reports开发** Oracle Forms用于创建用户界面,而Oracle Reports则负责生成报表。开发者需要熟悉这两者的语法和设计原则,以构建高效、用户...