求救

[复制链接]
查看11 | 回复3 | 2005-7-16 18:49:11 | 显示全部楼层 |阅读模式
本人项目需要一个自动流水号,比如第一年的流水号为年加自动流水号从1到某个值(一年中共办案件数),然后如果到了第二年流水号自动从年加1开始又往下编号.但不能用循环值,因为每一年的办案数可能不同. SEQUE+TRIGGERK中的代码应如何写?谢谢!


回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
用sequence+trigger并不好,不如自己写代码来产生一个自定义的编码,下面的代码稍改一下,就可以完成你要的功能啦...
create or replace procedure get_serviceid(v_type in varchar2, v_code out varchar2) is
/*
目的:根据service_id取编码,每天都从新计数,格式是yyyymmdd+type_id+#####(五位的流水号)
*/
v_curr_val sys_admin_code.curr_val%type;
v_curr_date sys_admin_code.curr_date%type;
begin
--取编码的基本信息
select curr_val, curr_date into v_curr_val, v_curr_date
from sys_admin_code
where code_name = v_type for update;
--如果是当天,则只更新curr_val
if trunc(v_curr_date,'dd') = trunc(sysdate,'dd') then
--产生当前的编码
v_code := to_char(v_curr_date,'yyyymmdd') || v_type || lpad(to_char(v_curr_val),5,'0');
--编码累加
update sys_admin_code
set curr_val = v_curr_val + 1, curr_date = sysdate
where code_name = v_type;
elsif trunc(v_curr_date,'dd') < trunc(sysdate,'dd') then
--编码置1
v_code := to_char(sysdate,'yyyymmdd') || v_type || lpad('1',5,'0');
--如果是第二天,则需要更新curr_date与curr_val
update sys_admin_code
set curr_val = 2, curr_date = sysdate
where code_name = v_type;
end if;
--提交数据累计
commit;
end;
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
一年中共办案件数
一年 中共。。。。
怀疑是特务
回复

使用道具 举报

千问 | 2005-7-16 18:49:11 | 显示全部楼层
最初由 caoliwei 发布
[B]一年中共办案件数
一年 中共。。。。
怀疑是特务 [/B]



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行