我有一个表 code字段 是 20080102001 (日期+序号)
当我插入一条记录时 自动生成新的code (20080102002)
我要把sql语句写在程序里 ,请问怎么写呢?
我在sqlserver里 可以
declare temp varchar(50);
select temp = max(code) form table1 where code like '20080120%';
..........请问在pl/sql怎么写呢 ? 以前一直用sqlserver里的sql 不知pl/sql应该怎样写? 谢谢大家
当我插入一条记录时 自动生成新的code (20080102002)
我要把sql语句写在程序里 ,请问怎么写呢?
我在sqlserver里 可以
declare temp varchar(50);
select temp = max(code) form table1 where code like '20080120%';
..........请问在pl/sql怎么写呢 ? 以前一直用sqlserver里的sql 不知pl/sql应该怎样写? 谢谢大家
解决方案 »
- 給这表student分配50K的两个区,后续分配的区大小每次增长50%,最多只能分配100个区。
- oracle如何知道哪些数据被更新
- tiff 栅格数据 如何查看其中的坐标信息并把他存入数据库
- 通过几个步骤有效关闭Oracle死锁进程
- 如何统计出某个时间段每个人每天的完成量
- 请问如何插入时间
- 初级问题,高分请教!
- 关于动态SQL的问题
- 我在WIN98下装了一个PERSONAL ORACLE请问它默认的用户名和口令都有哪些?如果用DBA身份登陆,应该用哪个?我想新建服务,但是好象表空间
- 往一个表中增加新数据的同时,该表又在进行rebuild index操作,会有什么问题吗?
- oracle中执行计划的运用
- 关于导数据的问题
如:
create table curMaxid(ldate varchar2(8),curid number)declare tcurid number;
declare counts number;
select count(1) into counts from counts where ldate=to_char(sysdate,'yyyymmdd');
if counts = 1 then
select curid into curMaxid from curMaxid where ldate=to_char(sysdate,'yyyymmdd');
curMaxid := curMaxid + 1
update curMaxid set curid = curid +1 where ldate=to_char(sysdate,'yyyymmdd');
commit;
else
insert into curMaxid values(to_char(sysdate,'yyyymmdd'),1);
commit;
end if;
where substr(code,1,8)=to_char(sysdate,'YYYYMMDD')
select max(code) into 变量名 from table1
where substr(code,1,8)=to_char(sysdate,'YYYYMMDD')
也可以直接
insert into tablename(code,字段...) values(select max(code)+1 from table1 where substr(code,1,8)=to_char(sysdate,'YYYYMMDD'),...)
不过这样就没有办法考虑大于999条记录的情况。
--------------------
20080102001
20080102002
20080310001SQL> SELECT TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(NVL(MAX(SUBSTR(COLA,9)),0)+1,3,'0')
2 FROM TB2 WHERE COLA LIKE TO_CHAR(SYSDATE,'YYYYMMDD')||'%';TO_CHAR(SYSDATE
---------------
20080310002SQL>
先建一个序列,然后在对应表中建一个before insert的行级触发器,使用:new.code=to_char(sysdate,'YYYYMMDD')||rpad(to_char(myseq.nextval),6,'0'),myseq是你建立的序列名,6是我自己设的,你自己看需要多少位流水号。
说明(我用的oracle817)
1、前台程序获取当前日期(yyyymmdd);
2、后台数据库用函数截取colA列,把不含日期(yyyymmdd)以外的部分找出来,然后最大值+1;
3、前台程序获取当前日期(yyyymmdd)||最大值+1即可;最好不用序列,序列必须是连续的,空间比较浪费而且不好控制