oracle数据库学习(二)

序列

序列,是数据库里面的一个对象,用来生成一定规律整数,(类似sqlserver里面自动增长)

CREATE SEQUENCE 序列的名字
[START WITH 序列起始值]--必须是一个整数(默认值是1)
[INCREMENT BY 序列的增长量]--必须是一个整数(默认值是1)
[ { MAXVALUE 序列可生成的最大值 | NOMAXVALUE } ] --NOMAXVALUE默认值,不设置最大值,默认值是[如果序列是升序,10的27次方,如果序列是降序,-1]
[ { MINVALUE 序列可生成的最小值 | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]--序列生成到最大值之后的处理方式(CYCLE表示循环生成)  默认是nocycle,不循环生成
[ { CACHE cache_num | NOCACHE } ]--序列的缓存个数 默认缓存20个 
[ { ORDER | NOORDER } ];--序列是否顺序获取
  • nextval序列的下一个值
  • currval序列的当前值,必须先next才能使用
触发器

触发器 与表相关联的一个可选的对象,不需要显示的调用,而是由程序执行增删改的时候自动执行


create  [or replace] trigger 触发器名
   {beffore||after}--在以前执行 或者之后执行
   {delete or insert or update}--在什么时候执行执行触发器
   [of 列名]--可选,对哪个列进行触发
   on 表名 --触发器对应的表
   【for each row 【when(条件)】】--行集触发器 及语句级触发器
   plsql块--plsql块
  • --如果没有设置 for each row(行集触发器), 默认是语句级触发器
  • 行集触发器,针对dml语句影响的数据行数执行多少次触发器
  • 语句级触发器,只针对执行的dml语句的数量执行多少次触发器,不管dml语句影响了多少条数据

--在触发器里判断执行的是什么操作
--再触发器里面判断具体的操作  inserting 插入操作 deleting删除操作 updating更新操作 
create or replace trigger tg
before insert or delete or update on stu for each row
begin
if inserting then 
RAISE_APPLICATION_ERROR(-20003, '执行的插入操作');
elsif deleting then 
RAISE_APPLICATION_ERROR(-20004, '执行的是删除操作');
elsif  updating then 
RAISE_APPLICATION_ERROR(-20005, '执行的是修改操作');
end if;
end;
pl/sql存储过程

declare
id int:=12;--声明名字为id 的变量,并赋初始值
name varchar2(50);--声明一个名字为name,类型为字符的变量
c constant int:=10;--声明一个常量值int为10
d  stu.ADDRESS%type;--引用类型  d变量的类型与stu表的address列的类型一致(引用stu表的地址)
srow stu%rowtype --记录集类型 (行级类型) srow的类型等于stu表的一行 --记录集类型(行级类型)
begin
id:=900;--给变量赋值
name:='oracle';
d:=name;
DBMS_OUTPUT.PUT_LINE(name||id||d);
end;

总结的大概,具体还有很多细节问题就不贴上来了。

kxind

性别:男. 敢于尝试 爱折腾的死宅程序猿. https://github.com/kxinds