• oracle 触发器与包


      1 /*
      2 
      3 1. 触发器
      4 什么是触发器?
      5 更改表中数据时,自动执行的一组代码。
      6 
      7 触发器特征:
      8 触发事件、触发条件、触发操作。
      9 事件(insert、update、delete)
     10 条件(on 表对象)
     11 操作(具体的plsql功能代码)
     12 时机(先后循环;之前执行(before)、之后执行(after))
     13 
     14 触发器的分类(级别):表级别、行级别。
     15 
     16 行级别:NEW(新的数据)、:OLD(旧的数据)
     17 
     18 表级别示例:before insert on test1 
     19 行级别示例:before insert on test1 for each row
     20 
     21 
     22 2. 程序包。
     23 
     24 */
     25 -------------------------------------程序包--------------------------------------------
     26 --包(将过程、函数逻辑上存放在一起)
     27 --存储过程、函数
     28 
     29 --系统内置包。
     30 dbms_output
     31 dbms_lob
     32 
     33 --用户自定义包。
     34 
     35 --包(包头(过程、函数的声明)、包体(过程、函数具体实现))
     36 
     37 --包头
     38 create or replace package first_package
     39 as
     40        procedure show99;--99乘法表
     41        procedure showEmpInfo(eno number);
     42 end first_package;
     43 
     44 --包体(具体实现)
     45 create or replace package body first_package
     46 as
     47        procedure show99
     48        as
     49        begin
     50          for i in 1..9 loop
     51            for j in 1..i loop
     52              dbms_output.put(i*j||'  ');
     53            end loop;
     54            dbms_output.put_line('');
     55          end loop;
     56        end show99;
     57        
     58        procedure showEmpInfo(eno number)
     59        as
     60        empinfo scott.emp%rowtype;
     61        begin
     62          select * into empinfo from scott.emp where empno=eno;
     63          dbms_output.put_line(empinfo.empno||':'||empinfo.ename);
     64        exception
     65           when no_data_found then
     66           dbms_output.put_line('没有找到该员工的信息');
     67           when others then
     68           dbms_output.put_line('others.............');
     69        end showEmpInfo;
     70 end first_package;
     71 
     72 --调用
     73 begin
     74     first_package.showEmpInfo(&编号);
     75 end;
     76 
     77 select first_package.fun from dual;
     78 
     79 
     80 
     81 
     82 
     83 
     84 
     85 
     86 
     87 
     88 -------------------------------------触发器操作--------------------------------------------
     89 --将表锁定(判断星期一、星期五表中的数据,可以正常操作;否则不能操作该表数据)
     90 
     91 create or replace trigger trig_test_table
     92 before insert or update or delete  on test1
     93 declare
     94        cweekday varchar2(20);
     95 begin
     96     select to_char(sysdate,'dy') into cweekday from dual;
     97     if cweekday='星期六' or cweekday='星期日' then
     98     dbms_output.put_line('你不能操作这张表哟!');
     99     raise_application_error(-20005,'今天系统放假了!');--抛异常,阻止用户操作
    100     end if;
    101 end;
    102 
    103 select to_char(sysdate,'dy') from dual;
    104 
    105 
    106 create table test1
    107 (
    108 tid int primary key,
    109 tname varchar2(20)
    110 )
    111 
    112 insert into test1 values (sequ_test1.nextval,'admin')
    113 
    114 create sequence sequ_test1
    115 
    116 
    117 select * from test1
    118 
    119 --能否利用触发器,给test1表添加一个自动增长列。
    120 --drop trigger trigger_test1
    121 create or replace trigger trigger_test1
    122 before insert on test1 for each row
    123 declare
    124 begin
    125   select sequ_test1.nextval into :NEW.tid from dual;
    126 end;
  • 相关阅读:
    自定义 Spring Boot 安全组件 Security 的用户名和密码的方法
    禁用 Spring Boot 中引入安全组件 spring-boot-starter-security 的方法
    CentOS 7 上配置 maven 的环境变量
    CentOS 7 上配置 JDK1.8 的环境变量
    CentOS 7 上安装 xz utils 解压缩工具
    常用 Maven 配置
    接口统计模板
    为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212
    什么是实体关系图(ERD)? 转
    彻底明白Flink系统学习5:window、Linux本地安装Flink
  • 原文地址:https://www.cnblogs.com/huzi007/p/2876379.html
Copyright © 2020-2023  润新知