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.包的设计与应用
    什么是包,包的创建及使用

     

  • 相关阅读:
    20190729
    [51Nod1623] 完美消除
    [WC2013] 糖果公园
    20190727
    在Java中调用带参数的存储过程
    Oracle 字符集的查看和修改
    查询oracle server端的字符集
    Mysql 数据库中文乱码问题
    错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
    CSS背景图拉伸自适应尺寸,全浏览器兼容
  • 原文地址:https://www.cnblogs.com/astar/p/1122136.html
Copyright © 2011-2022 走看看