• PLSQL_包、定时任务


    /****************************************005 PL/SQL 包、定时任务 *********************************/


    /**
    (1)包PACKAGE
    DBMS_OUTPUT
    DBMS_LOB
    DBMS_JOB..
    包(包头、包体)
    包头: 公共类型的变量、常量、异常、过程、函数等的声明。
    包体:私有类型的变量、常量、异常、过程、函数等的声明以及包头内的过程、函数的实现

    (2)包规范[包头]
    CREATE [OR REPLACE]
    PACKAGE <package_name>
    IS|AS
    [Public item declarations]
    [Subprogram specification]
    END [package_name];

    (3)包规范[包体]
    CREATE [OR REPLACE]
    PACKAGE BODY <package_nams>
    IS|AS
    [Private item declarations]
    [Subprogram bodies]
    [BEGIN Initialization]
    END [package_name];

    (4)程序包的优点
    模块化
    更轻松的应用程序设计
    信息隐藏
    新增功能
    性能更佳

    */


    /**
    -- 01 包示例
    -- 实验准备
    CREATE TABLE STUDENT (STU_NO NUMBER(3), NAME VARCHAR2(10), SCORE NUMBER(3));
    INSERT INTO STUDENT VALUES (1 , '小小', 99);
    INSERT INTO STUDENT VALUES (2 , '小G', 80);
    INSERT INTO STUDENT VALUES (3 , '诺诺', 98);
    INSERT INTO STUDENT VALUES (4 , '小北', 79);
    COMMIT;
    SELECT * FROM STUDENT;
    */

    -- 包头
    CREATE OR REPLACE PACKAGE PACK1
    IS
    V_A INT := 9;
    --定义显示游标1
    CURSOR MYCURSOR1 RETURN STUDENT%ROWTYPE;
    --定义参照游标1
    TYPE REFCUR1 IS REF CURSOR;

    --定义参照游标2
    TYPE REFCUR2 IS REF CURSOR;

    PROCEDURE INSERT_STUDENT(P1 IN STUDENT%ROWTYPE);
    PROCEDURE UPDATE_STUDENT(P2 IN STUDENT%ROWTYPE);
    --定义过程中使用显示游标
    PROCEDURE MYCURSOR1_USE;
    --定义过程中使用参照游标1
    PROCEDURE REFCUR1_USE;
    --定义过程中使用参照游标2
    PROCEDURE REGCUR2_USE(P_NO IN NUMBER, P_CURSOR OUT PACK1.REFCUR2);

    END PACK1;

    -- 包体
    CREATE OR REPLACE PACKAGE BODY PACK1
    IS
    V_B INT := 5;

    CURSOR MYCURSOR1 RETURN STUDENT%ROWTYPE
    IS
    SELECT * FROM STUDENT;

    PROCEDURE INSERT_STUDENT(P1 IN STUDENT%ROWTYPE)
    IS
    BEGIN
    INSERT INTO STUDENT(STU_NO, NAME, SCORE)
    VALUES(P1.STU_NO, P1.NAME, P1.SCORE);
    COMMIT;
    END;

    PROCEDURE UPDATE_STUDENT(P2 IN STUDENT%ROWTYPE)
    IS
    BEGIN
    UPDATE STUDENT SET NAME = P2.NAME, SCORE = P2.SCORE
    WHERE STU_NO = P2.STU_NO;
    COMMIT;
    END;

    PROCEDURE MYCURSOR1_USE
    IS
    V_STU STUDENT%ROWTYPE;
    BEGIN
    OPEN MYCURSOR1;
    LOOP
    FETCH MYCURSOR1 INTO V_STU;
    EXIT WHEN MYCURSOR1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('学号为:' || V_STU.STU_NO || '姓名为:' || V_STU.NAME);
    END LOOP;
    CLOSE MYCURSOR1;
    END MYCURSOR1_USE;

    PROCEDURE REFCUR1_USE
    IS
    MYREFCUR1 REFCUR1;
    V_STU STUDENT%ROWTYPE;
    BEGIN
    OPEN MYREFCUR1 FOR SELECT * FROM STUDENT;
    LOOP
    FETCH MYREFCUR1 INTO V_STU;
    EXIT WHEN MYREFCUR1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('学号为:' || V_STU.STU_NO || '姓名为:' || V_STU.NAME);
    END LOOP;
    CLOSE MYREFCUR1;
    END;


    PROCEDURE REGCUR2_USE(P_NO IN NUMBER, P_CURSOR OUT PACK1.REFCUR2)
    IS
    BEGIN
    OPEN P_CURSOR FOR SELECT * FROM EMP WHERE DEPTNO = P_NO;
    END;

    END PACK1;

    --查看包信息
    SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
    WHERE OBJECT_TYPE IN ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY');
    --调用PACK1.REGCUR2_USE
    DECLARE
    MYCURSOR PACK1.REFCUR2;
    V_EMP EMP%ROWTYPE;
    BEGIN
    PACK1.REGCUR2_USE(10,MYCURSOR);
    LOOP
    FETCH MYCURSOR INTO V_EMP;
    EXIT WHEN MYCURSOR%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('姓名为:' || V_EMP.ENAME);
    END LOOP;
    END;


    /**
    定时任务
    */
    /**
    -- 实验准备
    CREATE TABLE TEST(A DATE);

    CREATE OR REPLACE PROCEDURE PROC_TEST
    IS
    BEGIN
    INSERT INTO TEST VALUES (SYSDATE);
    END;
    */
    /**
    --定义任务
    VARIABLE job1 NUMBER;
    BEGIN
    DBMS_JOB.SUBMIT(:job1, 'PROC_TEST;', SYSDATE, 'SYSDATE+1/1440');
    END;
    --运行任务
    BEGIN
    DBMS_JOB.RUN(:job1);
    END;
    --删除任务
    BEGIN
    DBMS_JOB.REMOVE(:job1);
    END;
    SELECT * FROM TEST;

    */

  • 相关阅读:
    android选择时间攻略
    安卓通知的基本用法
    个人作业----软件工程实践总结
    第三次作业——《K米评测》
    第二次结对编程作业——毕设导师智能匹配
    原型设计与需求分析
    作品调研
    软件工程的实践项目课程的自我目标
    软件工程实践总结作业20161231
    K米测试
  • 原文地址:https://www.cnblogs.com/bymcyc/p/8888850.html
Copyright © 2020-2023  润新知