关于oracleexception的信息
本篇文章给大家谈谈oracleexception,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Oracle.DataAccess.Client.OracleException ORA-12154: TNS: 无法解析指定的连接标识符
- 2、Oracle异常分类小记
- 3、oracle exception问题续
- 4、oracle怎么获取exception信息?
- 5、oracle怎么获取exception信息
Oracle.DataAccess.Client.OracleException ORA-12154: TNS: 无法解析指定的连接标识符
TNS无法解析是Oracle操作里经常遇到的问题,原因有二:
(1)Oracle服务器没有装好(一般不建议重装,枝氏缺因为Oracle卸载不完全是没法重装的)
(2)TNS没有配置
现在本文给出解决方案:
现在先测试一下tns是否可以ping,成功的界面大致如下
这核卖里写图片描述猛辩
(1)在oracle安装路径的tns配置文件里添加如下代码
# tnsnames.ora Network Configuration File: d:\Oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
其中orcl是我的数据库名称,这个需要根据需要配置
[img]Oracle异常分类小记
前几天看《Oracle PL/SQL Programming》的异常处理部分 粗粗看了一遍 觉得有点乱 根据自己的理解作了一下分类 并相应给了一些简例 不一定很准确 供参考
Oracle 异常
具名 Oracle 异常
Oracle 为此类异常预先指定了异常号 异常信息 异常名称
匿名 Oracle 异常
Oracle 为此类异常预先指定了异常号 异常信息 但未指定异常名称
梁蠢猛 自定义异常
普通自定义异常
与 Oracle 无关的业务逻辑异常 无异常号 异常信息 异常名称需要手工声明
应用档袜程序异常 ( Raise_Application_Error )
与 Oracle 无关的业务逻辑异常 此方法抛出的异常可以自定义异常号及异常信息 可以通过 Exception_Init 绑定到手工声明的异常名称上
)Oracle异常
Oracle异常总是由Oracle检测并自动抛出的
)具名Oracle异常
Oracle定义了 个具名的Oracle异常 比如
Dup_val_on_index(ora )当中唯一索引所对应的列上键入重复值时
No_data_found(ora )执行select into未返回行 或者引用了索引表未初始化的元素时
流程
A)在Exception模块按异常名进行处理
示例
DECLARE
num number;
橡桥BEGIN
num:= / ;
EXCEPTION
when ZERO_DIVIDE then
dbms_output put_line(SQLERRM);
END;
/
ORA : divisor is equal to zero
PL/SQL procedure successfully pleted
)匿名Oracle异常
Oracle中存在大量匿名的异常 比如
ORA : parent key not found
由于PL/SQL的异常处理模块只接受异常名称 不接受异常号(除了WHEN OTHERS语句 它可以捕获任意异常 不论你是否具有异常名称) 为便于处理 需要手工为其指定异常名称
流程
A)声明异常
B)将此异常绑定到Oracle异常号上
C)在Exception模块按异常名进行处理
示例
DECLARE
ex EXCEPTION;
PRAGMA EXCEPTION_INIT(ex );
BEGIN
insert into t values( );
EXCEPTION
when ex then
dbms_output put_line(SQLERRM);
END;
/
ORA : integrity constraint (ADMIN FK ) violated parent key not found
PL/SQL procedure successfully pleted
)自定义异常
自定义异常总是开发者显式抛出来的
)普通自定义异常
流程
A)声明异常
B)使用Raise语句抛出异常
C)在Exception模块按异常名进行处理
示例
DECLARE
ex EXCEPTION;
BEGIN
RAISE ex;
EXCEPTION
when ex then
dbms_output put_line(SQLERRM);
dbms_output put_line( i raised a user defined exception ex );
END;
/
User Defined Exception
i raised a user defined exception ex
)应用程序异常Raise_Application_Error(Num Msg)
普通自定义异常既没有异常号(SQLCODE一律为 ) 也不能指定异常信息(SQLERRM一律为 User Defined Exception ) 如果想要为自定义异常指定异常号与异常信息 需要借助Raise_Application_Error(Num Msg)函数 这里的Num即异常号 范围是[ ] Msg则是异常信息
对于此类异常 由于Num是自定义的 因此应该有相应的管理办法以避免重复使用异常号 比如可以将已使用的异常号保存在一张数据库中表 以便将来检查
流程
A)声明异常
B)将此异常绑定到自定义的异常号上
C)使用Raise_Application_Error(Num Msg)抛出异常 同时指定了异常号及异常信息
D)在Exception模块按异常名进行处理
示例
CREATE OR REPLACE PROCEDURE mtest
is
ex EXCEPTION;
PRAGMA EXCEPTION_INIT(ex );
BEGIN
Raise_Application_Error( raising my exception );
EXCEPTION
when ex then
dbms_output put_line(SQLERRM);
END;
/
Procedure created
SQL exec mtest
ORA : raising my exception
lishixinzhi/Article/program/Oracle/201311/18175
oracle exception问题续
-- cursor 定义为for update 时,fetch的时候不能有commit 及 rollback命令的。
-- 否则会报ORA-01002: 读取违反顺序 错误
declare
cursor mycur is select * from scott.emp1 for update;
excep_emp exception;
游卜 excep_others exception;
begin
for v_emp in mycur loop
begin
-- 先检查是否超过5000
if v_emp.sal5000 then
raise excep_emp;
end if;
-- 然后在更新
dbms_output.put_line(v_emp.ename || '调整前的工资为:' || v_emp.sal);
update scott.emp1 set sal=1.5*sal where current of mycur;
dbms_output.put_line(v_emp.ename || '调整后的工资为:' || v_emp.sal * 1.5);
exception
毕余 when excep_emp then
dbms_output.put_line('该员工的工资不能超过5000');
when others then
-- 程序错误 抛出异常 停止运行
dbms_output.put_line('Error0:' || sqlerrm);
raise excep_others;
end;
end loop;
神数穗 -- 统一提交,
commit;
exception
when excep_others then
rollback;
when others then
dbms_output.put_line('Error1:' || sqlerrm);
end;
oracle怎么获取exception信息?
通过RAISE弹出框(调试时使用)
通过sqlcode,sqlerrm这唤脊两个内置变量来查看,
例如:DECLARE--声明伍芹异常some_kinds_of_errEXCEPTION;--Exceptiontoindicateanerrorconditionv_ErrorCodeNUMBER;--Variabletoholdtheer..
为了提高存储过程的健壮性,避免运行错误,当建立存储过程时应包含异常处理腔链毕部分.
oracle怎么获取exception信息
通过如下代码:
public static String getExceptionAllinformation(Exception ex){
String sOut = "";
StackTraceElement[] trace = ex.getStackTrace();
for (StackTraceElement s : trace) {
sOut += "\tat " + s + "\r\n";
}
return sOut;
}
扩展含闭资料:
注意事项
oracle存储过程,可以通过sqlcode 获取异常编码、通过sqlerrm获取异常信息。
例子:
create or replace procedure write2blob(p_id in number, --id
p_blob_data in blob,
p_msg out varchar2) --数据
is
v_lobloc blob; --目标blob
v_blob_data blob; --作为接受参数的字段,参数变量不能直接拿来赋值
v_amount binary_integer; --总长度
v_sub_length binary_integer; --一次读取的最大长度,不超过32766
v_sub_blob blob; --一次读取的子串
v_offset binary_integer; --游标
v_err_msg varchar2(1000);
v_id binary_integer; --要修改或新增的记录ID
v_temp binary_integer; --临时变量用于判断是否有v_id对应的记录begin
v_amount := length(p_blob_data);
v_blob_data := p_blob_data;
v_sub_length := 32767;
v_offset := 1;
v_id := p_id;
v_temp := 0; --execute immediate v_query_string into v_lobloc;
select count(1) into v_temp from a where id = v_id; --查询是埋老纳否有v_id对应的记录,并且赋值给v_te/*注意:无论是修改还是新增,blob字段都需要用empty_blob()进行初始化,否则弯没后边的blob内容,不能写进表里面。
关于oracleexception和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。