oracle创建表相关

 1 --创建表
 2 create table person(
 3 id number primary key,
 4 name varchar2(40),
 5 birth date
 6 );
 7 --创建序列
 8 create sequence person_id_seq
 9 increment by 1
10 start with 1
11 nomaxvalue --不设置最大值
12 nocycle  --一直累加,不循环
13 cache 10;
14 --创建触发器
15 create or replace trigger person_id_tri before insert on person
16 for each row
17 declare
18 v_newVal number(12) := 0;
19 v_incval NUMBER(12) := 0;
20 BEGIN
21   IF INSERTING AND :new.id IS NULL THEN
22     SELECT  person_id_SEQ.NEXTVAL INTO v_newVal FROM DUAL;
23     -- If this is the first time this table have been inserted into (sequence == 1)
24     IF v_newVal = 1 THEN 
25       --get the max indentity value from the table
26       SELECT NVL(max(id),0) INTO v_newVal FROM person;
27       v_newVal := v_newVal + 1;
28       --set the sequence to that value
29       LOOP
30            EXIT WHEN v_incval>=v_newVal;
31            SELECT person_id_seq.nextval INTO v_incval FROM dual;
32       END LOOP;
33     END IF;
34     --used to emulate LAST_INSERT_ID()
35     --mysql_utilities.identity := v_newVal; 
36    -- assign the value from the sequence to emulate the identity column
37    :new.id := v_newVal;
38   END IF;
39 END;
40 
41 --简单触发器,上面触发器有问题,序列被跳过
42 create or replace trigger person_id_tri before insert on person
43 for each row when(new.id is null)
44 BEGIN
45 select person_id_seq.nextval into :new.id from dual;
46 end;
47 
48 --插入实例
49 insert into person(name, birth) values('ceshi',sysdate);
50 --错误的时间格式
51 insert into person(name,birth) values('hehe','2015-06-02 00:00:00');
52 --正确的插入日期
53 insert into person(name,birth) values('hehe',to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss'));
54 insert into person(name,birth) values('hehe',to_date('2005-01-01','yyyy-MM-dd'));
55 
56 --oracle 中日期的格式化
57 select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
58 
59 --查询表
60 select * from person ;
61 
62 --截断表
63 truncate table person;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流柯技术学院

MySQL执行计划解读

id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

731
来自专栏大数据

mysql联合索引详解

上一篇文章:mysql数据库索引优化 比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。 b+tree结构...

2379
来自专栏乐沙弥的世界

PL/SQL 游标变量

    游标变量与游标相似,有其共性,也有其不同点。就其共性来说两者都是指向多行查询的结果集中的当前行。都要经历声明,打开,检索与关闭的过程。所不同的是游标与游...

674
来自专栏杨建荣的学习笔记

关于表联结方法(二) (r4笔记第23天)

在比较经典的表联结方法中,nested loop join和hash join是比较常用的,对于sort-merge join来说,可能略微有些陌生。 在数...

2554
来自专栏青玉伏案

Oracle之PL/SQL学习笔记

  自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧。是以前做的,一直在压箱底,今天拿出...

1768
来自专栏静默虚空的博客

Mysql 快速指南

1622
来自专栏听雨堂

分组合计且排序和显示名称

        分组合计的一个问题是,合计中最大的问题是:只能显示groupby的字段,不能显示其它的字段。有时还需要排序,就很麻烦。这里有一个实现。 SELE...

1659
来自专栏杨建荣的学习笔记

和Null有关的函数(r3笔记第48天)

关于null相关的函数在日常的工作中还有比较实用的,可能会碰到各种和Null校验相关的情况,大体有以下几种。 case when decode nvl nvl...

30012
来自专栏黑白安全

MYSQL中case when语法的作用

严格来讲,不应该叫“mysql条件判断语句case when语法”的,它的专业语术是:“mysql流程控制语句case语法”;这一点对于做程序的人来说一定要清楚...

702
来自专栏java一日一条

数据库性能优化之SQL语句优化

在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着...

392

扫描关注云+社区