美文网首页
2018-08-31-Oracle学习第五天

2018-08-31-Oracle学习第五天

作者: BALE_11 | 来源:发表于2018-09-01 20:36 被阅读0次

    1、--异常处理(了解)

    -- 也就是,当发现有异常出现,则捕获提示。

    -- 预定义的 Oracle 异常,有异常名,有错误代码,有异常信息。

    -- 非预定义的 Oracle 异常,有错误代码,有异常信息,但是没有异常名字。

    -- 在实际开发中,我们的异常处理,一般情况下都是需要使用 Java 代码方式来处理。

    -- 因为我们学习的 Java 语言是面向对象的

    -- Oracle 数据库其实是一个关系型数据库,如果要操作的话,太麻烦了。

    -- C 面向过程:步骤需要详细到每一步,所有的资源释放都要自己来。

    -- Java 面向对象:所有的业务逻辑,交给对应的对象去执行。

    eg:

    --异常test

    declare

      vid tb_student.id%type;

      vname tb_student.name%type;

    begin

      select id,name into vid,vname

        from tb_student

        where id=3;

      dbms_output.put_line('vid 的值:' || vid );

      dbms_output.put_line('vname 的值:' || vname );

      exception

        when too_many_rows then

            dbms_output.put_line('返回数据过多');

        when no_data_found then

            dbms_output.put_line('找不到对应的数据');

        when others then

            dbms_output.put_line('其实我也懵的..不知道发生了什么');

    end;


    2、--游标

    /************************************

    游标:用来提取多行数据(了解)

    Oracle 打开一个工作区(内存区域)来保存多行查询的结果集,

    游标就是给这个工作区命的名称,并能用于处理由多行查询而返回的记录行。

    隐式游标: 默认的 DML 语句和 select 语句都有隐式游标。

    显示游标: 开发中给工作区命名,并且可以进行操作。

    %ISOPEN  Boolean  游标打开,则返回True(游标打开之后,不能再次打开,游标关闭之后,不能再次关闭)

    %NOTFOUND  Boolean  如果最近抓取没有获得记录,返回True

    %FOUND  Boolean  如果最近抓取获得记录,返回True

    %ROWCOUNT  Number  返回到目前为止获取的记录数

    使用游标的步骤:

    1. 定义游标  CURSOR c_tb_stuu IS SELECT * FROM tb_stuu;

    2. 打开游标  OPEN c_tb_stuu;

    3. fetch游标  FETCH c_tb_stuu INTO r_tb_stuu;

      游标有个指针,默认指向第一行之上,fetch将指针向下移动,指向第N行数据,

      如果有数据,NOTFOUND返回false,FOUND返回true。

      如果到末尾,会一直抓取最后一条数据

    4. 关闭游标  CLOSE c_tb_stuu;

    ************************************/

    eg:

    declare

      v_id tb_student.id%type;

      v_name tb_student.name%type;

      v_sex tb_student.sex%type;

    cursor curTest  /*声明游标*/

    is

    select id,name,sex

      from tb_student;

    begin

      open curTest;  /*打开游标*/

      fetch curTest into v_id,v_name,v_sex; /*读取的游标数据存储到指定变量中*/

      while curTest%found loop

        dbms_output.put_line('id:'||v_id||'姓名:'||v_name||'性别:'||v_sex);

        fetch curTest into v_id,v_name,v_sex; /*读取的游标数据存储到指定变量中*/

      end loop;

      close curTest;

    end;

    /********带参数的游标**********/

    declare

      v_id tb_student.id%type;

      v_name tb_student.name%type;

      v_sex tb_student.sex%type;

      v_address tb_student.address%type;

      cursor  curTest2  /*声明游标2*/

      is

      select id,name,sex

      from tb_student;

      cursor  curTest3(vid tb_student.id%type)  /*声明带参数的游标3*/

      is

      select address

      from tb_student

      where id=vid;

      begin

      --↓↓先打开外层游标

        open curTest2;  /*打开游标*/

        fetch curTest2 into v_id,v_name,v_sex; /*读取的游标数据存储到指定变量中*/

        while curTest2%found loop

          dbms_output.put_line('id:'||v_id||'姓名:'||v_name||'性别:'||v_sex);

          --↓↓打开内层游标

          open curTest3(v_id);

            fetch curTest3 into v_address;

            while curTest3%found loop

              dbms_output.put_line(v_id||'的地址为:'||v_address);

              fetch curTest3 into v_address;

            end loop;

          close curTest3;

          --↑↑关闭内层游标

          fetch curTest2 into v_id,v_name,v_sex; /*读取的游标数据存储到指定变量中*/

        end loop;

        close curTest2;

        --↑↑关闭外层游标

      end;


    3、--存储过程

    -- 过程,可以简单理解为是一个函数。

    -- 函数和过程的区别:函数总是向调用者返回数据,而过程没有数据返回。

    -- Oracle 可以将 PL/SQL 代码存储在数据库中,然后可以提供给其他地方来运行它。

    -- 这个动作就叫存储过程,也可以理解为一个创建一个函数给其他人用。

    -- 语法格式

    procedure 名字(参数)

    is

      声明局部变量;

    begin

      语句

    end;

    eg:--创建一个叫procTest的存储过程

    create or replace procedure procTest(p_id in tb_student.id%type,p_name in tb_student.name%type,p_sex in tb_student.sex%type)

    as

    begin

      insert into tb_student(id,name,sex) values(p_id,p_name,p_sex);

      commit; -- 提交数据

      dbms_output.put_line('插入成功!');

    end;

    --调用存储过程

      execute procTest(8,'张三丰','女');

    ***-- 存储过程也可以使用图形界面方式创建:文件 → 新建 → 程序窗口 → procedure


    4、--存储过程(备份)

    相关文章

      网友评论

          本文标题:2018-08-31-Oracle学习第五天

          本文链接:https://www.haomeiwen.com/subject/vikuwftx.html