新聞中心
Oracle未知異常問(wèn)題,怎么解決
當(dāng)與一個(gè)異常錯(cuò)誤相關(guān)的錯(cuò)誤出現(xiàn)時(shí),就會(huì)隱含觸發(fā)該異常錯(cuò)誤。用戶定義的異常錯(cuò)誤是通過(guò)顯式使用?RAISE?語(yǔ)句來(lái)觸發(fā)。當(dāng)引發(fā)一個(gè)異常錯(cuò)誤時(shí),控制就轉(zhuǎn)向到?EXCEPTION塊異常錯(cuò)誤部分,執(zhí)行錯(cuò)誤處理代碼。
在鞏留等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,外貿(mào)網(wǎng)站建設(shè),鞏留網(wǎng)站建設(shè)費(fèi)用合理。
對(duì)于這類異常情況的處理,步驟如下:
1、在PL/SQL?塊的定義部分定義異常情況:
異常情況??EXCEPTION;
2、RAISE?異常情況;
3、在PL/SQL?塊的異常情況處理部分對(duì)異常情況做出相應(yīng)的處理。
例:更新指定員工工資,增加100;
DECLARE???v_empno?employees.employee_id%TYPE?:=empno;???no_result??EXCEPTION;BEGIN???UPDATE?employees?SET?salary?=?salary+100?WHERE?employee_id?=?v_empno;???IF?SQL%NOTFOUND?THEN??????RAISE?no_result;???END?IF;EXCEPTION???WHEN?no_result?THEN???????DBMS_OUTPUT.PUT_LINE('數(shù)據(jù)更新語(yǔ)句失敗了!');???WHEN?OTHERS?THEN??????DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END;
1、彈出錯(cuò)誤框:
示例代碼:
declare
v_count number;
begin
select count(*) into v_count from dept;
if v_count 10 then
raise_application_error(-20001,'數(shù)量小于10');
end if;
end;
執(zhí)行結(jié)果:
2、控制臺(tái)顯示:
示例代碼:
declare
v_count number;
my_exp exception;
begin
select count(*) into v_count from dept;
if v_count 10 then
raise my_exp;
end if;
exception
when my_exp then
dbms_output.put_line('數(shù)量小于10');
when others then
dbms_output.put_line('其他異常');
end;
執(zhí)行結(jié)果:
PS:ORACLE 用戶自定義異常小例子:
CREATE OR REPLACE PROCEDURE test_Exception_byLeejin
(
ParameterA IN varchar,
ParameterB IN varchar,
ErrorCode OUT varchar --返回值,錯(cuò)誤編碼
)
AS
/*以下是一些變量的定義*/
V NUMBER;
V nvarchar();
V NUMBER;
APP_EXP EXCEPTION; --自定義異常
BEGIN
ErrorCode :='';
IF (ParameterA=ParameterB) THEN
ErrorCode := 'ParameterA = ParameterB';
RAISE APP_EXP; --?拋出異常
END IF;
EXCEPTION
WHEN APP_EXP THEN --在處理異常
RAISE_APPLICATION_ERROR(-,ErrorCode);
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-,'未知異常');
END;
oracle存儲(chǔ)過(guò)程中異常怎么用?
第三行的declare刪掉
那段select 有問(wèn)題,最后的的條件,id=3改為sid=3;
正確的如下:
create or replace procedure ss as
s_id integer;
s_name varchar2(20);
s_age integer;
begin
begin
select sid, sname, sage
into s_id, s_name, s_age
from student
where sid = 3;
exception
when NO_DATA_FOUND then
insert into student values (3, 'zj', 22);
commit;
end;
end;
Oracle怎么捕獲ora-00942的異常
不知道你想在什么環(huán)境下捕獲,不知道你說(shuō)的SQL是怎么捕獲,或者你說(shuō)的是腳本?
如果是在存儲(chǔ)過(guò)程中捕獲
有兩個(gè)思路吧,
1、直接使用普通的異常處理,獲取異常的代碼,匹配是否為00942,然后就捕獲到這個(gè)異常。
2、自定義異常處理,使用數(shù)據(jù)字典,首先查詢數(shù)據(jù)字典中是否存在這表,如果不存在,就產(chǎn)生一個(gè)自定義的異常,在這個(gè)異常里你做處理。
------------------------------------------------------------------------------------
declare
myexception exception;
--表個(gè)數(shù)
v_num integer :=0;
begin
--查詢表名為MY_USER表個(gè)數(shù)
SELECT count(*) into v_num FROM tabs WHERE table_name = 'MY_USER'
if v_num=0 then
raise myexception;
end if;
exception
when myexception then
raise_application_error(20001,'my exception happens');
when others then
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
end
----------------------------------------------------------------------------------------
偽代碼,你可以嵌到你的存儲(chǔ)過(guò)程中去使用。
關(guān)于ORACLE異常處理的問(wèn)題
很顯然在p2中 異常exp1沒(méi)有定義,而p1中 exp1進(jìn)行過(guò)初始化, 所以p1認(rèn)識(shí)exp1,erp2不認(rèn)識(shí)(將其當(dāng)做其它)
你可以給exp1定義一個(gè)異常號(hào)碼,這樣在p2中截獲異常時(shí)通過(guò)對(duì)異常號(hào)碼進(jìn)行判斷。
或者把他們放到一個(gè)oracle包中,將exp1 定義為 包變量,這樣p1中初始化過(guò)exp1,p2中也可以使用了。
oracle出現(xiàn)異常如何繼續(xù)執(zhí)行
你的意思是, 要當(dāng)發(fā)生異常 dbms_output.put_line('111er'); 以后, 循環(huán)繼續(xù)執(zhí)行?
create or replace procedure demo as
myex exception;
begin
begin
for i in 1 .. 10 loop
BEGIN
if i = 5 then
raise myex;
end if;
dbms_output.put_line(i);
exception
when others then
dbms_output.put_line('111er');
END;
end loop;
end;
end demo;
ORA-12560顯示“Oracle錯(cuò)誤”如何解決?
1、開始---程序---管理工具---服務(wù),打開服務(wù)面板,啟動(dòng)oraclehome92TNSlistener服務(wù)。
2、開始---程序---管理工具---服務(wù),打開服務(wù)面板,啟動(dòng)oracleserviceXXXX,XXXX就是你的database SID。
3、win+r,輸入regedit回車,在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0將該環(huán)境變量ORACLE_SID設(shè)置為XXXX,XXXX就是你的database SID。
產(chǎn)生原因:
監(jiān)聽服務(wù)沒(méi)有起來(lái)、database instance沒(méi)有起來(lái)、注冊(cè)表問(wèn)題。 ?
Oracle?Database:
是甲骨文公司的一款關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。到目前仍在數(shù)據(jù)庫(kù)市場(chǎng)上占有主要份額。作為一個(gè)通用的數(shù)據(jù)庫(kù)系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個(gè)關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫(kù)它實(shí)現(xiàn)了分布式處理功能。但它的所有知識(shí),只要在一種機(jī)型上學(xué)習(xí)了ORACLE知識(shí),便能在各種類型的機(jī)器上使用。
網(wǎng)頁(yè)標(biāo)題:oracle異常怎么使用 oracle異常有哪幾種
網(wǎng)址分享:http://www.ef60e0e.cn/article/hpdjho.html