oracle存儲過程拋出異常
A. 請問高人JAAVA調用ORACLE得存儲過程出現這樣得錯誤怎麼解決
你這是sql語句有錯誤。。檢查下語句
B. Oracle 存儲過程怎麼拋出異常
你說的異常是什麼意思?如果是,執行中的錯誤,那麼可以用「調試」,不過需要有一個系統許可權的擁護才能調試,許可權好象是什麼debug XXXXX。
如果說的是有時執行因為這樣那樣的數據問題出現的異常,那麼一般都是通過exception來拋出異常的,這樣的拋出的異常,你可以自己編代碼,然後輸入一張表內,這樣就可以捕獲異常了。如果1表示沒有主鍵,2表示數據超長等等。具體的寫法網上很多,這里就不寫了。
C. oracle的存儲過程中如何使得在執行出現異常時程序還可以繼續執行
可能用異常處理
open cur_temp for vc_sql1;
loop
fetch cur_temp
into vc_prcname, vc_prctype;
exit when cur_temp%notfound;
vc_sql2 := '。。。';
begin
execute immediate vc_sql2; --這句代碼有可能會執行出錯,希望在執行出錯時可以忽略該錯誤,繼續往下循環,如何實現?
exception
when others then
end;
end loop;
close cur_temp;
試試這樣行不行。
D. oracle 存儲過程中出現異常的處理
異常是執行這個存儲過程出的異常吧,那就是說只有執行一次這個存儲過程才會拋一次異常么?如果這樣我建議你可以再寫個存儲過程來調用你這個存儲過程,這樣來記錄異常的次數。然後再進行處理!
E. oracle存儲過程中 未找到數據 異常的問題。。。
解決這個辦法很多,按提問者的意思,異常肯定是no
data
found,這個時候你需要檢查在哪出現的這個異常,如果數據不多的話,你可以用一條一條記錄的去試,如果數據量大的話那直接在每個select前先選出count(*)
into
counts,當
counts<>
0的時候再讓它執行下邊的語句,或者直接存儲工程中加異常處理的語句,我一般遇到這種情況都是用第一種,很簡單但是很實用,屢試不爽。哈哈,如果有機會再交流交流
F. 請教各位高手 oracle 存儲過程 如何獲得 捕獲異常的內容
--通過sqlcode , sqlerrm 這兩個內置變數來查看,例如:
DECLARE
--聲明異常
some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition
v_ErrorCode NUMBER; -- Variable to hold the error message code
v_ErrorText VARCHAR2(200); -- Variable to hold the error message text
BEGIN
--...
--拋出異常
IF ( ... ) THEN --(括弧內填拋出異常的條件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉異常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他異常,並獲得 捕獲異常的內容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.
dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/
/**
sqlcode 就是錯誤代碼
sqlerrm 就是sql錯誤信息。注意用substr來截取,否則輸出很難看。
**/
G. oracle 存儲過程報錯
oracle 存儲過程的基本語法
1.基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) IS
變數1 INTEGER :=0;
變數2 DATE;
BEGIN
END 存儲過程名字
2.SELECT INTO STATEMENT
將select查詢的結果存入到變數中,可以同時將多個列存儲多個變數中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變數1,變數2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循環
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.變數賦值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.帶參數的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變數值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
連接資料庫後建立一個Test WINDOW
在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試
H. oracle 存儲過程異常處理
先建一個錯誤跟蹤表
create sequence s_error_id;
CREATE TABLE ERROR_RECORD
(
ERROR_ID NUMBER(10) primary key,
ERROR_CODE NUMBER(10),
ERROR_MSG VARCHAR2(2000),
ERROR_DATE DATE,
ERROR_PROGRAM VARCHAR2(200)
);
--------在過程的例外里向跟蹤表寫入錯誤信息:
create or replace procere day_task is
v_sqlcode ERROR_RECORD.ERROR_CODE%type;
v_msg ERROR_RECORD.error_msg%type;
begin
------program body
exception when others then
--記錄錯誤信息表
v_sqlcode :=sqlcode;
v_msg :=sqlerrm;
insert into error_record(error_code,error_msg,error_date,error_program)
values (v_sqlcode,v_msg,sysdate,『day_task』);
end;
I. oracle存儲過程中遇到主鍵沖突會拋出異常還是繼續執行
分情況操作,如果是循環入庫的話,拋異常時判斷是否是主鍵沖突,然後繼續繼續執行下一條繼續進行添加操作,如果是單個數據入庫直接拋異常
