zoukankan      html  css  js  c++  java
  • 第五天、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.包的设计与应用
    什么是包,包的创建及使用

     

  • 相关阅读:
    C# 中字符串转换成日期
    c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
    c#获取程序版本号
    分分钟用上C#中的委托和事件
    【转载】C# 中的委托和事件(详解:简单易懂的讲解)
    C#什么时候需要使用构造函数
    15、生命周期-BeanPostProcessor-后置处理器
    13、生命周期-InitializingBean和DisposableBean
    11、组件注册-使用FactoryBean注册组件
    12、生命周期-@Bean指定初始化和销毁方法
  • 原文地址:https://www.cnblogs.com/astar/p/1122136.html
Copyright © 2011-2022 走看看