Oracle学习笔记(四)——练习

今天老师出了一道题,意思就是:怎么从过程中返回数据集。

 

下面是我使用的一个方法:

    包:

        CREATE OR REPLACE PACKAGE pkg_type IS
              TYPE my_cur IS REF CURSOR;
        END;

  包比较类似于JAVA中的包+接口,在本例中是定义了一个游标类型,供外部使用.

    过程:

       CREATE OR REPLACE PROCEDURE sp_get_dataset(
            p_deptno dept.deptno%TYPE,
            p_cur OUT pkg_type.my_cur
       )
       AS
       BEGIN
            OPEN p_cur FOR
              SELECT * FROM emp WHERE emp.deptno=p_deptno;
       END;

   我们可以看到过程中定义了2个参数,其中第2个参数为OUT,意思是该参数不能接收值,只能对外提供数据,我们用他来返回数据集,同时把他的类型定义为前面包中定义的类型,用'包名.类名',块中其实就是一个游标FOR循环.

    外部调用:   

       DECLARE
            my_cur pkg_type.my_cur;
            my_row emp%ROWTYPE;
       BEGIN
             scott.sp_get_dataset(10,my_cur);
             FETCH my_cur INTO my_row;
             WHILE(my_cur%FOUND)
           LOOP
             dbms_output.put_line(my_row.empno||'->'||my_row.ename);
             FETCH my_cur INTO my_row;
           END LOOP;

           CLOSE my_cur;
       END;

   为了能够接收过程中返回来的数据,我们将定义一个与返回数据类型相同的变量,同时定义了一个行变量用于取数据,在块中调用过程的时候,因为第2个参数不能接收数据,但可以向外提供数据,所以我们在参数传递的时候给第2个参数传入游标对象,意思是将过程中返回的数据赋值给该对象以供我们使用,接下来就是传统的游标使用方式.

 

    今天的主要内容是复习前面学习到的常用知识点,总的来说难度不大,自己加压,不过还是有收获,比如不太熟悉的异常处理,在今天彻底解决了,归纳如下:  

 Oracle 异常分类
       Oracle 异常
          预定义:取了名字的 Oracle 异常
          非预定义:没有取名字的 Oracle 异常
       自定义:根据业务需要人为抛出的异常
 
每日一问:
   什么是 以数据库为中心的业务系统 ? 最常用的脚本技术有哪些?
答:指主要数据库脚本程序 ( 存储过程等 ) 处理复杂业务的系统,如医院的门诊、住院 系统 ……
   最常用的脚本技术有:存储过程、函数、触发器
 
    Oracle中许多常用的函数,比如Lpad,许多函数的发现需要靠自己多看多练多想,自己寻找对大家学习能力的提升是有帮助的,SO....Come on, everbody!

 

你可能感兴趣的:(oracle,脚本)