【发布时间】:2015-02-23 08:03:19
【问题描述】:
这是我的场景:
我想在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,当出现 name 大于 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;
【问题讨论】:
-
我刚接触数据库,所以希望有人帮我做,
-
创建或替换过程 exception_handler IS vSqlErr Varchar2(200) ; vSqlCode Varchar2(5) ; id2号码;名称2 varchar(250); BEGIN 全部插入 tab3 值(id,name) select * from tab1 t;其他人则插入 tab2 值(id,名称)时的例外情况; vSqlErr := substr(sqlerrm, 1, 200) ; vSqlCode := substr(sqlcode, 1, 5) ;插入错误值(vSqlErr,vSqlCode);犯罪 ;增加;结束;
-
我已经编辑了你的问题。而且,请在下面查看我的答案。
标签: oracle plsql exception-handling sql-insert