oracle中建立一个表,主键是编号P+年四位月两位+_+流水号三位001。这个怎么建啊?
来源:互联网 发布:知远防务 招聘 编辑:程序博客网 时间:2024/06/06 18:01
2013-02-03 12:23哈日珠拉美 分类:数据库DB | 浏览 582 次
可以用自增序列么?那日期怎么插入啊?
2013-02-03 15:24提问者采纳
热心网友
流水号格式:P + 年四位月两位流水号三位例如:P20130203001P20130203999CREATE TABLE TEST_SEQNO ( SEQNO VARCHAR(10) PRIMARY KEY, VALVARCHAR(20));方案一:使用 序列号 + 触发器 + 存储过程 + 数据库作业 -- 序列号CREATE SEQUENCE seq_testno increment by 1 -- 每次递增1 start with 1 -- 从1开始 nomaxvalue -- 没有最大值 minvalue 1 -- 最小值=1 NOCYCLE;-- 触发器.CREATE OR REPLACE TRIGGER tr_test_seqno BEFORE INSERT ON TEST_SEQNOFOR EACH ROWBEGIN SELECT 'P' || TO_CHAR(sysdate, 'YYYYMM') || TRIM(TO_CHAR(seq_testno.nextval, '000')) INTO :new.SEQNO FROM dual;END;/-- 测试SQL> INSERT INTO TEST_SEQNO(VAL) VALUES('T1.1');已创建 1 行。SQL> SELECT * FROM TEST_SEQNO;SEQNO VAL-------------------- ----------------------------------------P201302001 T1.1-- 用于 重置序列号的 存储过程.CREATE OR REPLACE PROCEDURE ResetSeqTestno -- 注:由于动态SQL 里面,创建序列号, -- 如果不加下面这行,执行将报错 “ORA-01031: 权限不足”AUTHID CURRENT_USERASBEGIN -- 由于每月1日早上 0点, 需要把序列号的当前数值, 重置为 1. -- 但是由于不能通过 ALTER SEQUENCE 语句来修改序列号的当前值 -- 因此只能每月1日 删除-重建 序列号. -- 首先是删除. EXECUTE IMMEDIATE('DROP SEQUENCE seq_testno '); -- 然后是重建. EXECUTE IMMEDIATE('CREATE SEQUENCE seq_testno increment by 1 start with 1');END;/-- 将存储过程, 加入 Oracle 作业. 每月1日 00:00 执行.variable jobno number;begindbms_job.submit(:jobno, 'ResetSeqTestno;', ADD_MONTHS(trunc(sysdate, 'MM'), 1), 'ADD_MONTHS(trunc(SYSDATE, ''MM''),1)');commit;end;/ALTER session SET nls_date_format='yyyy-mm-dd hh24:mi:ss';-- 查询作业.SELECT job, what, next_date, interval FROM user_jobs;JOB----------WHAT--------------------------------------------------------------------------------NEXT_DATE-------------------INTERVAL-------------------------------------------------------------------------------- 62ResetSeqTestno;2013-03-01 00:00:00ADD_MONTHS(trunc(SYSDATE, 'MM'),1)
- 提问者评价
谢谢你帮我大忙了
0 0
- oracle中建立一个表,主键是编号P+年四位月两位+_+流水号三位001。这个怎么建啊?
- Oracle 生成流水号 存储过程 订单编号
- 更改一个没有主键的oracle表中并不是完全相同的其中一条语句
- 一个三位自然数正好等于它各数位上的数字和的18倍。这个三位自然数是几?
- 主键ID流水号
- ORACLE中生成流水号
- SQL 流水号 字符串主键
- mybatis插入流水号主键
- 连续编号的流水号拼接成一个字串的存储过程
- 连续编号的流水号拼接成一个字串的存储过程
- 在oracle中建立自动递增的主键列
- 在oracle中建立自动递增的主键列
- 表中主键,外键 建立规则
- oracle数据库中怎么给已经在使用的表添加主键id的解决方法
- 如何用一个SQL语句产生一系列流水编号
- 在plsql developer中怎么给表设一个自增主键
- Oracle建立自增主键
- Oracle建立自增主键
- JVM内存管理和JVM垃圾回收机制
- CentOS下tar解压 gz解压 bz2等各种解压文件使用方法
- CREATESTRUCT
- 预防 Android Dex 64k Method Size Limit
- eclipse 快捷键基础类表单
- oracle中建立一个表,主键是编号P+年四位月两位+_+流水号三位001。这个怎么建啊?
- Netty5入门学习笔记004-使用Netty传输POJO对象(上)
- java深入解析-第3章 String类
- Algorithms—14.Longest Common Prefix
- MongoDB 入门相关资源
- lzzuiaoykr
- jquery.jqzoom.js图片放大镜
- Grails边做边学入门篇[0]--------讲讲什么是Grails
- Linux 多进程读写文件 文件锁