• 第五天、PL/SQL高级应用


    5.PL/SQL高级应用

    1.游标的设计开发
    什么是游标,为什么用游标,怎么使用游标
    游标是一种PL/SQL控制结构,可以对SQL语句的处理进行显式控制,便于对表的行数据条进行处理
    游标分为显示和隐式两种
    游标的属性:%FOUND,%ISOPEN,%NOTFOUND,%ROWCOUNT
    在SQLPLUS下:
    例;
    DECLARE
    CURSOR mycur IS
    SELECT * FROM BOOKS;
    myrecord BOOKS%ROWTYPE;
    BEGIN
    OPEN mycur;   打开游标
    PETCH mycur INTO myrecord;  把游标存储到变量中。
    WHILE mycur%FOUND LOOP   %found表示有数据可取
    DBMS_OUTPUT.PUT_LINE(myrecord.books_id||','||myrecord.books_name);
    PETCH mycur INTO myrecord;  
    END LOOP;
    CLOSE mycur;    关闭游标
    END;

    save c:\text.txt

    例:利用游标参数
    DECLARE
    CURSOR cur_para(id varchar2) IS     这里的参数不加长度
    SELECT BOOKS_NAME FROM BOOKS WHERE BOOKS_ID=id;
    t_name books.books_name%TYPE;定义一个T_NAME变量和后面的一个类型
    BEGIN
    OPEN cur_para('001');
    LOOP
    PETCH cur_para INTO t_name;
    EXIT WHEN cur_para%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(t_name);
    END LOOP;
    CLOSE cur_para;
    END;
    /

    %ISOPEN  游标打开的时候为TRUE,关闭的时候为FALSE。
    %ROWCOUNT 从游标中取出的的总数 

    当然也可以用游标来修改数据
    例:
    DECLARE
    CURSOR cur IS
    SELECT name FROM deptment FOR UPDATE;
    text varchar2(10);
    BEGIN
    OPEN cur;
    PETCH cur INTO text;
    WHILE cur%FOUND LOOP
    UPDATE deptment SET name=name||'_t' WHERE CURRENT OF cur;
    PETCH cur INTO text;
    END LOOP;
    CLOSE cur;
    END;
    /

    隐式游标的使用
    BEGIN
    FOR cur IN(SELECT name FROM deptment) LOOP
    DBMS_OUTPUT.PUT_LINE(cur.name);
    END LOOP;
    END;
    /
    缺点:每次都得编译,不能存储到数据库中。

    2.存储过程
    存储过程的创建,参数的使用,存储过程的执行
    创建语法:
    CREATE [OR REPLACE] PROCEDURE procedurename
    [(param1[{IN|OUT|IN OUT}]param1_type
    [,(param2[{IN|OUT|IN OUT}]param2_type
    ....
    IS|AS
    ....
    BEGIN
    Proc_body;
    END;
    /
    例:
    CREATE OR REPLACE PROCEDURE myproc(id varchar2)
    IS
    name varchar2(10);
    BEGIN
    SELECT books_name INTO name FROM books WHERE books_id=id;
    DBMS_OUTPUT.PUT_LINE(name);
    END myproc;    myproc过程名可以不写
    /

    执行存储过程
    DECLARE
    tid varchar2(10);
    BEGIN
    tid:='001';
    myproc(tid);   调用函数,存储过程
    END;
    /

    BEGIN
    myproc('001');  这样也可以调用
    END;
    /

    EXECUTE myproc('001');  这样也可以调用存储过程,不能调用带输出参数的存储过程

    CREATE OR REPLACE PROCEDURE myproc2(id varchar2,name out varchar2)   name是输出参数
    IS
    BEGIN
    SELECT books_name INTO name FROM books WHERE books_id=id;
    END;
    /

    DECLARE
    tid varchar2(10);
    tname varchar2(10);
    BEGIN
    tid:='001';
    myproc2(tid,tname);
    END;
    /

    3.存储函数的设计
    函数的创建,参数的使用,函数的调用

     

    4.包的设计与应用
    什么是包,包的创建及使用

     

  • 相关阅读:
    委托与事件
    Winform 窗体闪烁 & 任务栏提示
    Main函数
    WPF数据虚拟化
    异步编程、线程和任务
    内存管理与垃圾回收
    Winform 获取桌面设备上下文
    全选,反选,全不选以及计算价格,删除
    全选、反选、删除
    解析数据图片自动轮播——圆点
  • 原文地址:https://www.cnblogs.com/astar/p/1122136.html
Copyright © 2020-2023  润新知