這裏是我的情況:插入記錄到表上的異常
我想寫Oracle中的過程中,有四個表格,TAB1,TAB2,TAB3,ERR。 tab1有一些數據在兩列(id number, name varchar(250))
,而其他是空的。
架構TAB2是
(id number, name varchar(50)), for tab3 (id number, name varchar(250))
。
我想插入數據從tab1到tab2,當有像例如名稱大於varchar(50)的異常時,它會插入到tab3中,並將錯誤消息插入到err表中。
因此,使用異常處理相應地將tab1中的所有記錄插入tab2和tab3中。
這是我試過但失敗了。
CREATE OR REPLACE
PROCEDURE exception_handler
IS
vSqlErr VARCHAR2(200) ;
vSqlCode VARCHAR2(5) ;
id2 NUMBER;
name2 VARCHAR(250);
BEGIN
INSERT ALL INTO tab3 VALUES
(id, name
)
SELECT * FROM tab1 t;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO tab2 VALUES
(id, name
);
vSqlErr := SUBSTR(sqlerrm, 1, 200) ;
vSqlCode := SUBSTR(SQLCODE, 1, 5) ;
INSERT INTO err VALUES
(vSqlErr, vSqlCode
) ;
COMMIT ;
RAISE;
END;
我與數據庫新鮮,所以想爲我做的人, – 2015-02-23 08:06:12
在這裏,我試過,但.. – 2015-02-23 08:09:03
** CREATE OR REPLACE PROCEDURE exception_handler IS vSqlErr VARCHAR2(200); vSqlCode Varchar2(5); id2號碼; name2 varchar(250); BEGIN 將所有 插入到tab3值(id,name) select * from tab1 t; EXCEPTION 何時其他則 插入tab2值(id,name); vSqlErr:= substr(sqlerrm,1,200); vSqlCode:= substr(sqlcode,1,5); 插入err值(vSqlErr,vSqlCode); 提交; RAISE; 結束; ** – 2015-02-23 08:09:43