Oracle 建立序列以及触发器的建立

笔记系列


序列:序列的创建方法,以及插入数据时的使用;

--序列的创建
create sequence sq
increment by 1
start with 1
maxvalue 10
minvalue 1
cycle
cache 5--一般(一个序列可以用在多张表,但是一般情况下,一张表对应一个序列)
create sequence sq
increment by 1
start with 1
nocache
nocycle--使用序列的方法
insert into emp(empno,ename)
values(sq.nextval,'Tim');--查看数据
select * from emp;


触发器:

--触发器:特殊的存储过程。
--特点:无法直接手动调用,只能自动触发(由一个动作去触发)。
--类型:dml触发器、instead of替代触发器、系统触发器
--dml触发器
--1、语句级(执行操作语句时,只触发一次)
--语法:
create or replace trigger tri_XXX
动作  on  表
declare......
begin......
end;--例子:给30号部门的员工集体涨工资200元(触发一个语句级触发器)。
--建立触发器(类似于先把存储过程建好,等着被调用)
create or replace trigger tri_update_emp
after update on emp  --修改动作完成后执行触发器
begindbms_output.put_line('涨工资了......');
end;
--触发
update emp set sal=sal+200 where deptno=30;--建立触发器(类似于先把存储过程建好,等着被调用)
create or replace trigger tri_update_emp
before update on emp  --修改之前触发
begindbms_output.put_line('涨工资了......');
end;
--触发
update emp set sal=sal+200 where deptno=30;--2、行级(没修改一行,都要触发一次)
create or replace trigger tri_update_emp
after update on emp  --修改动作完成后执行触发器
for each row
begindbms_output.put_line('涨工资了......');
end;
--触发
update emp set sal=sal+200 where deptno=30;--例子
create or replace trigger tri_up_del_ins_emp
after delete or insert or update on emp  --修改动作完成后执行触发器
for each row
begindbms_output.put_line('触发了......');
end;
--触发
delete from emp where deptno=30;--条件谓词(布尔类型):inserting 、updating、 deleting
create or replace trigger tri_up_del_ins_emp
after delete or insert or update on emp  --修改动作完成后执行触发器
for each row
beginif inserting thendbms_output.put_line('又来新人了,oo......');elsif updating thendbms_output.put_line('修改了,能行不......');elsedbms_output.put_line('被开除了......');end if;end;
--触发
delete from emp where deptno=30;--实例:简易图书管理系统
select * from book;
select * from borrow;
--增加一列
alter table book 
add countOfBook integer check(countOfBook>=0);
--完成借书功能,需要borrow表插入一行,book表对应书籍库存-1。
--问题1、触发器建在哪个表上? borrow
--问题2、怎么把插入borrow表的数据传给book? :NEW
--*****行级触发器,自带了两个特殊变量
-- :new --自动存放新插入的数据记录(一行数据),和修改之后的记录行
-- :old --自动存放被删除的数据记录(一行数据),和修改之前的记录行
--例子
create or replace trigger tr_up_emp
after update on emp
for each row
begindbms_output.put_line(:old.ename||:old.sal);dbms_output.put_line(:new.ename||:new.sal);
end;
--触发
update emp set ename='ao-smith',sal=250
where ename='SMITH';SELECT * FROM book;
--实现借书功能
--第一步: 在borrow上建立触发器,用来自动修改book表
create or replace trigger tri_in_borrow
after insert on borrow
for each row 
beginupdate book set countOfBook=countOfBook-1where bid=:new.bid;
end;
--第二步:只需在borrow中插入数据就OK
insert into borrow 
values('T013','1002','B003',sysdate,null);--作业:P322 11、12, 上面例子中的借书功能  

instead of 触发器:

--instead of(触发动作,实质上不执行,真正执行的只有触发器)
--视图:固化的查询,存储在服务器上。view里面不可能有数据
--它只是一个被存起来的查询,操作时类似于表。
create view scott.v_emp
as
select empno,ename,dname
from  emp natural join dept; --emp\dept叫做视图的基表select * from v_emp; --实质是调用了存在其里面的那个查询语句create or replace trigger tri_v_emp
instead of insert on v_emp
for each row
begin--获取部门编号insert into emp(empno,ename,deptno)values(:new.empno,:new.ename,(select deptnofrom dept where dname=:new.dname));
end;insert into v_emp
values(9999,'TT','SALES');


触发器和序列:记录数据库的登陆信息;

--instead of
--view 没有数据,里面存放的是查询语句
--通过view可以修改基表,只能修改查询中涉及到的列,但是可以通过触发器的:new或者:old获取可以修改的数据,
--然后再去修改基表中的其他列--view
create or replace view scott.v_view
as
select * from emp;--可以查看一下view
select * from v_view;--修改视图
create or replace--删除视图
drop view scott.v_view;--触发器--不能独立存在,必须依附于表或者视图,只有对它的载体有操作,触发器才会执行
--dml
--instead of--系统触发器(相关于系统级别的操作所能触发的触发器) --database
create table t_log
(id integer primary key,username varchar2(20),log_time date
)--建立一个触发器用来记录登录信息
create or replace trigger tri_log
after  logon on database
begininsert into t_logvalues(sq_log.nextval,user,sysdate);
end;drop trigger tri_log;
--触发
select * from t_log;--有个自动增长列
--序列:可以提供连续数据的oracle对象。
--语法:create sequence sq_log
increment by 1
start with 1;--序列自带两个特殊变量
select sq_log.nextval from dual;insert into t_log
values(sq_log.nextval,user,sysdate);create table t_log1
(id integer primary key,username varchar2(20),log_time date
)insert into t_log1
values(sq_log.nextval,user,sysdate);



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战:Redis 性能测试

为什么需要性能测试? 性能测试的使用场景有很多,例如以下几个: 技术选型,比如测试 Memcached 和 Redis;对比单机 Redis 和集群 Redis 的吞吐量;评估不同类型的存储性能,例如集合和有序集合;对比开启持久化和关闭持久化的吞吐量;对比调优和未调优的吞吐量;对比不同 R…

操作系统Ubuntu(实验三四)

实验三四3._实验三:Linux进程/线程的异步并发执行3.1_fork()函数创建子进程3.2_创建线程pthread_create();4._实验四:使用信号量进行互斥与同步4.1_信号量初使用(1)信号量简单介绍(2)信号量以及P、V操作的使…

Java RandomAccessFile writeShort()方法与示例

RandomAccessFile类writeShort()方法 (RandomAccessFile Class writeShort() method) writeShort() method is available in java.io package. writeShort()方法在java.io包中可用。 writeShort() method is used to write the short value to the file as 2 bytes directly wi…

js中cookie的使用详细分析

cookie概述 cookie 是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制,而并不是JavaScript本身的性质。cookie是 存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览…

实战:Redis哨兵模式(上)

上一篇我们讲了主从复制模式,它是属于 Redis 多机运行的基础,但这种模式本身存在一个致命的问题,当主节点奔溃之后,需要人工干预才能恢复 Redis 的正常使用。 例如,我们有 3 台服务器做了主从复制,一个主服务器 A 和两个从服务器 B、C,当 A 发生故障之后,需要人工把 B…

Oracle plsql 打包

--打包 --创建包 --步骤: --1、声明(创建包头) --2、创建数据对象(创建包体)--1、 create or replace package myPack asv_bookCount integer;procedure p_back(v_stuid borrow.stuid%type,v_bid borrow.bid%type);fun…

计算机网络(第四章网络层)

第四章网络层4.1_网络层提供的两种服务(1)虚电路服务(2)数据报服务4.2_网络协议4.2.1_虚拟互连网络4.2.2_分类的IP地址(1)分类IP地址三种分类方法IP 地址的一些重要特点4.2.3_IP地址与硬件地址4.2.4_地址解…

Java ObjectInputStream readShort()方法(带示例)

ObjectInputStream类readShort()方法 (ObjectInputStream Class readShort() method) readShort() method is available in java.io package. readShort()方法在java.io包中可用。 readShort() method is used to read 2 bytes of short value from this ObjectInputStream. re…

实战:Redis 主从同步

主从同步(主从复制)是 Redis 高可用服务的基石,也是多机运行中最基础的一个。我们把主要存储数据的节点叫做主节点 (master),把其他通过复制主节点数据的副本节点叫做从节点 (slave),如下图所示: 在 Redis 中一个主节点可以拥有多个从节点,一个从节点也可以是其他服务…

Oracle view 小结片段

以前下载了一个关于Oracle 视图的pdf,水平有限,没看懂多少。 版本信息: select * from v$version; 数据库信息: select name, created, log_mode from v$database; 基本的许可信息 select * from v$license; 数据库中已安装的…

idea连接sqlserver及数据库操作

idea连接sqlserver及操作一、在连接过程中遇到的问题:(1)数据库登录失败(2)登录成功之后数据库端口号怎么查看二、代码连接数据库①加载驱动和连接数据库三、数据库操作连接详解链接 总体流程链接 操作实例链接 一、…

Java ObjectInputStream readFloat()方法与示例

ObjectInputStream类readFloat()方法 (ObjectInputStream Class readFloat() method) readFloat() method is available in java.io package. readFloat()方法在java.io包中可用。 readFloat() method is used to read 4 bytes (i.e. 32 bit) of float value from this ObjectI…

实战:Redis 集群模式(上)

Redis Cluster 是 Redis 3.0 版本推出的 Redis 集群方案,它将数据分布在不同的服务区上,以此来降低系统对单主节点的依赖,并且可以大大的提高 Redis 服务的读写性能。 Redis 将所有的数据分为 16384 个 slots(槽),每个节点负责其中的一部分槽位,当有 Redis 客户端连接集…

java 调用 Oracle 存储过程

一个函数本质上一个返回一个结果的存储过程,这个例子示范了怎么调用有in、out和in/out参数的函数。 大同小异的方法。    CallableStatement cs; try { // 调用一个没有参数的函数; 函数返回 a VARCHAR // 预处理callable语句 cs connection.prepareCall("…

连接数据库实例

idea连接数据库步骤详解 package com.company; import java.sql.*; public class Main {public static void main(String[] args) {Student student new Student();try {SqlOperation.main();ResultSet resultSet ScoreSql.selectScoreSql();//输出所有行操作while(resultSe…

实战:Redis 哨兵模式(下)

上一篇我们介绍了 Redis Sentinel 的搭建和运行原理,本文我们重点来看下 Sentinel 的命令操作和代码实战。 Sentinel 命令操作 要使用 Sentinel 实现要连接到 Sentinel 服务器,和连接 Redis 服务相同,我们可以使用 redis-cli 来连接 Sentinel,如下命令所示: [@iZ2ze0nc…

java事务处理

有个同学给我的文档,直接发上来了, 在数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作…

vsftp配置参数

vsftp配置参数 转载:http://blog.chinaunix.net/uid-134240-id-172158.html listen_addressip address 指定侦听IP listen_portport_value 指定侦听端口,默认21 anonymous_enableYES 是否允许使用匿名帐户 local_enableYES 是否允许本地用户登录 …

Java文件类boolean canWrite()方法(带示例)

文件类boolean canWrite() (File Class boolean canWrite()) This method is available in package java.io.File.canRead(). 软件包java.io.File.canRead()中提供了此方法。 This method is used to write the file and the file is represented by the abstract filepath or …

案例:Redis 问题汇总和相关解决方案

本文收集了一些 Redis 使用中经常遇到的一些问题,和与之相对应的解决方案,这些内容不但会出现在实际工作中,也是面试的高频问题,接下来一起来看。 缓存雪崩 缓存雪崩是指在短时间内,有大量缓存同时过期,导致大量的请求直接查询数据库,从而对数据库造成了巨大的压力,严…