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可更新视图

可更新视图是指通过视图,来更新、插入、删除基本表中的数据。视图是一个虚拟表,即对视图的更新,实质上是更新基表。但是视图的构造很多时候是由多个表连接查询,以及结合...

804
来自专栏帘卷西风的专栏

关于SQL中Union和Join的用法

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

813
来自专栏跟着阿笨一起玩NET

Sql Server:多行合并成一行,并做分组统计

911
来自专栏你不就像风一样

MySQL常用SQL语句/函数/存储过程

你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列

692
来自专栏AhDung

【SQL】找出行数与自增标识值不相等的表(即有缺行)

原理:遍历所有含自增列的用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,然后使用IDENT_CURRENT函数获取表的最大标识值,比较二...

932
来自专栏乐沙弥的世界

避免游标多次遍历

游标在数据库领域被广泛使用,尤其是对于需要将SQL语句返回的数据集进行逐行处理的时候。这为数据处理提供了极大的便利性,然游标的不当 使用从某种程度...

662
来自专栏散尽浮华

mysql操作命令梳理(1)-索引

1、创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。以下命令语句分别展...

1956
来自专栏跟着阿笨一起玩NET

SQL Server 2008 新语法

401
来自专栏乐沙弥的世界

高效SQL语句必杀技

        No SQL,No cost. SQL语句是造成数据库开销最大的部分。而不良SQL写法直接导致数据库系统性能下降的情形比比皆是。那么如何才能称得...

532
来自专栏抠抠空间

MySQL之单表查询

一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY fiel...

3007

扫码关注云+社区