有请zhuzhichao及其他大虾帮忙解决一个存储过程的问题?

am2000 2001-07-25 08:33:34
我现在需要用ORACLE写一个存储过程。
基本思路如下:
功能:获取单据号(递增)
要求:
1、能够通用。即适合于每一个相关窗体
2、在开始的时候生成
格式:
共12个字节:前面八个为年月日,第九十位为单据标志位,后面两位为序号。初始值为200107250101
多谢指点!
...全文
157 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
是將flowno加1存到billtable中去.
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
:)
是的.
所有的窗體用的號全在billtable這張表中.
然後我判斷日期如果是新的一天就從'01'開始,否則用表中的號.
喔,忘了告訴你,你取到號後,在存到你的主表中去時,
別忘了將flowno加1存進去.
am2000 2001-07-25
  • 打赏
  • 举报
回复
哦,我知道你的意思了,你是用标识位来控制的。好!好思路!我真没想到啊
am2000 2001-07-25
  • 打赏
  • 举报
回复
草兄:我还有一个表名做参数的吧
am2000 2001-07-25
  • 打赏
  • 举报
回复
谢谢,我试试先
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
create table billtable --單據表
(
billdate varchar2(8),
billsign varchar2(2),
flowno varchar2(2)
);


/*根據單據標誌位得到單號*/
create or replace procedure getdefaultno(
v_sign in varchar2, --標誌位
v_defaultno out varchar2) --單號
as
v_today varchar2(8); --今天日期
v_date varchar2(8); --表中日期
v_flowno varchar2(2); --流水號
begin
select (to_char(sysdate,'yyyy')||to_char(sysdate,'mm')||to_char(sysdate,'dd')) into v_today from dual;
select billdate,flowno into v_date,v_flowno from billtable where billsign = v_sign;
if (v_date is null) then
insert into billtable values (v_today,v_sign,'01'); --如果表中沒有此標誌位的紀錄
v_defaultno := v_today || v_sign || '01';
else
if (v_today = v_date) then
v_defaultno := v_today || v_sign || v_flowno; --如果是今天
else
update billtable set billdate = v_today ,flowno = '01' where billsign = v_sign; --新的一天
v_defaultno := v_today || v_sign || '01';
end if;
end if;
dbms_output.put_line(v_defaultno);
end getdefaultno;
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
我是這樣想的,
如果你每一个相关窗体
傳入的单据标志位都不同就好辦了.
例如,w_a傳入'01',w_b傳入'02'.

zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
像单据:DH2001072501 是傳進去變成9,10位的01嗎?
am2000 2001-07-25
  • 打赏
  • 举报
回复
我想这不是很难,只是我一直没有ORACLE的参考书,E文又菜。所以...需要请你指点。
除此之外,我主要是不能处理通用。我不想在每个窗体中都写个过程来调用。
am2000 2001-07-25
  • 打赏
  • 举报
回复
没有实际意义,最好做为输入参数输入进去。譬如说到货单据:DH2001072501
am2000 2001-07-25
  • 打赏
  • 举报
回复
就是单句类型
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
呵呵,从数据库版移到pb版了.
wangsw 2001-07-25
  • 打赏
  • 举报
回复
????up
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
"单据标志位"
是什麼東東?
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
一滴兄弟太抬舉我了.
我可不是大蝦,呵呵.

先占第一,再看內容.

:)
am2000 2001-07-25
  • 打赏
  • 举报
回复
谢谢两位了,等我运行成功后就结贴
guo 2001-07-25
  • 打赏
  • 举报
回复
原来如此
zhuzhichao 2001-07-25
  • 打赏
  • 举报
回复
to guo(正在消化Oracle):
1.我完全同意.
2.
這你就不知了.他的"单据标志位"是個固定的東西.
比如窗口a一直用'01',窗口b一直用'02'
而最後的"序号"他要求的是每天都從'01'開始.
因此它們都不能用Sequence
guo 2001-07-25
  • 打赏
  • 举报
回复
建议程序做如下修改:
1.8位日期的组成可以简化为to_char(sysdate,'YYYYMMDD')
2.后两位可以使用Sequence
最终的方法是to_char(sysdate,'YYYYMMDD')||单据号||to_char(sequence)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧