zoukankan      html  css  js  c++  java
  • 程序包,引用游标,隐式游标,触发器

    //程序包
    CREATE OR REPLACE PACKAGE cal AS
           PROCEDURE addtest(a IN NUMBER, b IN NUMBER);
    END cal;
    
    //程序体
    CREATE OR REPLACE PACKAGE BODY cal AS 
           PROCEDURE addtest(a IN NUMBER, b IN NUMBER) AS
             BEGIN
               dbms_output.put_line(a + b);
             END;
    END cal;

    利用引用游标构建的程序包 和程序体

    --构建程序包
    CREATE OR REPLACE PACKAGE stuinfo AS
           TYPE stucur IS REF CURSOR;
           PROCEDURE showname(scla IN NUMBER, stus OUT stucur);
    END stuinfo;
    
    --构建程序包体
    CREATE OR REPLACE PACKAGE BODY stuinfo AS
    
           PROCEDURE showname(scla IN NUMBER, stus OUT stucur) AS
             
             BEGIN
               
               OPEN stus FOR SELECT * FROM student s WHERE s.class=scla;
               
             END;
             
    END stuinfo;

    隐式游标

    DECLARE
    
    BEGIN
      UPDATE STUDENT S SET S.SBIRTHDAY = S.SBIRTHDAY + 3650 WHERE s.class=95031;
      IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('数据更新成功 !');
        DBMS_OUTPUT.PUT_LINE(sql%ROWCOUNT);
        COMMIT;
      ELSE
        DBMS_OUTPUT.PUT_LINE('更新失败 !');
      END IF;
    END;

    触发器

    语句级触发器: 一个 update/delete/insert 语句只使触发器执行一次

    create or replace trigger employees_trigger
    after
    update on employees
    begin
    dbms_output.put_line('修改了一条记录!');
    end;

    30. 使用 :new, :old 修饰符

    create or replace trigger employees_trigger
    after
    update on employees
    for each row
    begin
    dbms_output.put_line('old salary: ' || :old.salary || ', new salary: ' || :new.salary);
    end;

    31. 编写一个触发器, 在对 my_emp 记录进行删除的时候, 在 my_emp_bak 表中备份对应的记录

    1). 准备工作:
    create table my_emp as select employee_id id, last_name name, salary sal from employees
    create table my_emp_bak as select employee_id id, last_name name, salary sal from employees where 1 = 2

    2).
    create or replace trigger bak_emp_trigger
    before delete on my_emp
    for each row
    begin
    insert into my_emp_bak values(:old.id, :old.name, :old.sal);
    end;

  • 相关阅读:
    Git----远程仓库01
    Git--时光穿梭机之删除文件06
    Git----时光穿梭机之撤销修改05
    Git----时光穿梭机之管理修改04
    Git----时光穿梭机之工作区和暂存区03
    Git---时光穿梭机之版本回退02
    Git----时光穿梭机01
    Git---创建版本库
    python自动化之鼠标移动
    python自动化之excel
  • 原文地址:https://www.cnblogs.com/NCL--/p/7384497.html
Copyright © 2011-2022 走看看