Oracle数据库的常用对象(三)----PL/SQL 语法、存储过程

﹥>﹥吖頭↗ 提交于 2019-11-29 00:48:01

(三)PL/SQL

Procedure Language / SQL    存储过程

命名程序:存储过程,函数,触发器

--------------------------------------基础语法--------------------------------------------

1. 语句块:

    begin

        dbms_output.put_line('HelloWorld');

    end;

2. 定义变量

    declare

        num number(4);

        name varchar2(10);

    begin

        num := 1001;

        name := 'amui';   -- :=是赋值操作

        dbms_output.put_line(num || ':' || name);        --  ||连接字符串,相当于+

    end;

3. if语句

    a) 示例1:

    declare

        age number(2);

    begin

        age := 19;

        if age > 20 then

            dbms_output.put_line('A');

        else

            dbms_output.put_line('B');

        end if;            --要记得end if

    end;

    b) 示例2:    

    

4. case结构

    


5. 循环

    a) loop循环语法实例:

        

    b) while循环语法实例

        

    c) for循环语法实例

        

6. PL语句与SQL语句结合使用

    a) 示例1:插入一条数据:

        其中,在declare定义语句中,v_empno emp.empno%type表示v_empno的类型是参考自数据库

    中表emp中的属性empno的类型。

        

    b) 示例2:查询数据(查询某个具体值,将其赋给PL中的变量)

        注意与常规SQL语句不一样 

            select ename into v_ename from emp where empno = v_empno;

        

    c) 示例3:

        语句 v_emprowData emp%rowtype; 表示变量 v_emprowData 参考自表emp中的一行数据。

        变量v_emprowData 相当于一个对象。

        


        --------------------------------------存储过程------------------------------------------

        1. 存储过程定义:(无参存储过程)

            

        2. 调用存储过程的方式:

            a) 命令调用:

                exec my_pro1;

            b) 过程调用:

                begin

                    my_pro1;

                end;

            c) 使用Java程序调用:

                {call my_pro1}

        3. 有参存储过程:

            a) 需求:创建一个存储过程,根据员工编号返回员工信息。

            在该参数列表中,可以写成 v_empno number , 但是number上不能标识长度大小。

            in 表示传入的参数,out表示传出参数,即返回值。

            b)调用带有输入参数和输出参数的存储过程:

            

           不能使用命令调用带有输出参数的存储过程!

        4. 自联表

            如果输入输出参数的类型一样,可以简写如下:

            


        -----------------------------------------程序包---------------------------------------------

        程序包:用于存储过程,函数,类型

        1. 定义程序包:

            

        2. 创建包体,包体的名字和包名相同

            

        3.调用包中的存储过程

            exec mypack1.mypro1;


        ----------------------------------------游标---------------------------------------------

        游标:cursor,一个内存区域,不是类型

        1. 需求:创建返回一个表中多条记录的存储过程(使用游标,创建一个参照游标特性的类型)

            a) 获取一条数据:

            

            b) 循环获取多条数据:

            mycursor%found 表示判断,判断是否是否存在

            

    2.在程序包中定义参照游标的类型

        a) 需求:创建一个存储过程,返回EMP表所有记录

            1)创建程序包,包中定义类型

            

            2)调用包:参数中需要用到参照游标特性的类型,需要调用包

                以下示例功能是根据每页数据数算出最大页数,同时返回从某一页的数据。

       3)测试:

             


        

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!