设为首页 加入收藏

TOP

oracle利用游标单条插入数据举例(二)
2015-11-21 01:42:43 来源: 作者: 【 】 浏览:1
Tags:oracle 利用 游标 单条 插入 数据 举例
PNO IN (7771,7772,7773);

?

实验准备基本上完成了,利用工具我们看一下每张表的数据情况。

\

\

\

(2)、编写存储过程

下面我们利用cursor来实现对数据单条查询,然后单条插入的目的。

CREATE OR REPLACE PROCEDURE PD_CESHI IS

  v_ErrorCode NUMBER;           -- 错误代码

  v_ErrorText VARCHAR2(4000);    -- 错误信息

cursor c1 is

SELECT 

a.EMPNO,

a.ENAME,

a.JOB,

a.MGR,

a.HIREDATE,

a.SAL,

a.COMM,

a.DEPTNO 

 FROM EMP a,EMP_2 b where a.empno=b.empno;

 

BEGIN

 

   For te in c1 loop

 

       begin

 

          insert into EMP_3(

          EMPNO,

          ENAME,

          JOB,

          MGR,

          HIREDATE,

          SAL,

          COMM,

          DEPTNO

            )

            values(

            te.EMPNO,

            te.ENAME,

            te.JOB,

            te.MGR,

            te.HIREDATE,

            te.SAL,

            te.COMM,

            te.DEPTNO

       );

       EXCEPTION

         WHEN   NO_DATA_FOUND THEN

           NULL;

         WHEN OTHERS THEN

           v_ErrorCode := SQLCODE;

           v_ErrorText := SQLERRM;

           /** 记录异常数据及错误信息 **/

           insert   into   error_log(ID,TABLE_NAME,ERROR_ID,ERROR_CODE,ERROR_TEXT,CREATE_DATE)    values(sys_guid(),'EMP_2',te.EMPNO,v_ErrorCode,v_ErrorText,sysdate);

       end;

 

   End   loop;

   commit;

   /** 异常处理 过程异常**/

   EXCEPTION

     WHEN    NO_DATA_FOUND    THEN

        NULL;

     WHEN   OTHERS   THEN

      v_ErrorCode := SQLCODE;

      v_ErrorText := SQLERRM;

      /** 记录异常数据及错误信息 **/

      insert   into   error_log (ID,TABLE_NAME,ERROR_ID,ERROR_CODE,ERROR_TEXT,CREATE_DATE)   values(sys_guid(),'EMP_OBJECT','',v_ErrorCode,v_ErrorText,sysdate);

END PD_CESHI;

创建一个记录错误日志的表:

create   table   ERROR_LOG

(

  id                       VARCHAR2(32),

  table_name    VARCHAR2(100),

  error_id            VARCHAR2(100),

  error_code      VARCHAR2(100),

  error_text        VARCHAR2(4000),

  create_date    DATE   default   sysdate

);

(3)、开始实验

利用PL/SQL Developer工具完成存储过程的创建,我们下面来执行这个存储过程,如下:

\

完成后,我们来看一下目标表里的数据,如下:

\

看到以上的结果数据,我们已经把数据以遍历的形式插入到了我们的目标表里了。

如果这么说不具说服力,我们需要再进一步验证一下是否是单条插入的话。这里我们可以有这么个思路,如果这个是实现单条插入的,那么也就意味着如果中途有某条数据出现问题,将不会影响到其余数据的插入,因为这是以单条为单位插入的嘛~~

来验证一下。

(4)、模拟错误处理

TRUNCATE   TABLE  EMP_3;

SELECT * FROM EMP_3;

\

制造问题数据:

alter   table   EMP   modify   deptno   NUMBER(6);
?

修改数据:

我们利用PL/SQL Developer工具把empno为7788的deptno由20修改为209999。这样的话,当我们插入到目标表中时,就会由于字段长度抛出一个错误来。

\

我们执行一下存储过程,如下:

\

存储过程执行完毕后,我们可以预见到7788的那条数据应该没有了,而其它的13条数据应该是可以正常插入的。我们来验证一下,如下:

\

可以看到结果中没有empno为7788的数据。

到错误记录日志表里看一下,如下:

\

我们可以看到,错误记录已经被记录到日志表里,抛出的1438错误(ORA-01438: 值大于为此列指定的允许精度)。

通过这种方式,我们从侧面也可以了解到,单条数据插入时,错误被抛出,不影响其它的数据插入。

实验完毕。

小实验,随手记之。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle创建自增字段方法-ORACLESE.. 下一篇ORACLE-014:oracle中查看DBLink..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: