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 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

使用exchange方式切换普通表到分区表

      随着数据库数据量的不断增长,有些表需要由普通的堆表转换为分区表的模式。有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区...

671
来自专栏数据库新发现

如何获得跟踪文件名称

http://www.eygle.com/faq/How.To.Get.Tracefile.Name.htm

1092
来自专栏从ORACLE起航,领略精彩的IT技术。

Oracle之SQL优化专题01-查看SQL执行计划的方法3.1 dbms_xplan.display_cursor(null,null,'allstats last')3.2 dbms_xplan.

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

oracle坏块修复实例

最近几天发现库里有坏块了,环境是11gR2, linux平台的64位的库。以下是我的修复办法,基于dbms_repair做的在线修复,也可以基于备份rman来修...

3439
来自专栏数据库新发现

Oracle9i新特性-使用DBMS_METADATA包获得对象DDL语句

从Oracle9i开始Oracle提供了一个新的系统包DBMS_METADATA,可以用于提取对象创建的DDL语句。

1142
来自专栏沃趣科技

SQL优化案例-分区索引之无前缀索引(六)

无前缀索引:分区索引不包含分区字段就叫无前缀索引,那么什么时候用无前缀索引和前缀索引呢?

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

mysql常用命令

这几天学习了一下mysql,对于mysql的命令总结如下,发现很多方面和oracle还是差别挺大的。 # mysql -uroot -p Enter passw...

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

关于查询转换的一些简单分析(三) (r3笔记第69天)

关于查询转换,已经讨论了视图合并和子查询解嵌套,还有谓词推进和物化视图查询重写也是查询转换中不可或缺的部分。 -->谓词推进 这个术语听起来高大上,有点故弄玄虚...

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

生产系统调优之_敢于质疑(90天)

接着昨天的那个问题来说。有个sql语句在做了统计信息收集之后,速度有了一定的提升,从5秒的响应降低到了2秒。但是和预期还是有一定 的差距,按照80条查询请求在短...

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

sql语句的简化(r2第7天)

今天碰到一个sql语句简化的问题,虽然也不复杂,但是也值得从中学习一些东西 SELECT MOD(((SELECT TO_NUMBER(TO_CHAR(LOG...

2676

扫码关注云+社区