我想这不是很难,只是我一直没有ORACLE的参考书,E文又菜。所以...需要请你指点。
除此之外,我主要是不能处理通用。我不想在每个窗体中都写个过程来调用。

解决方案 »

  1.   

    我是這樣想的,
    如果你每一个相关窗体
    傳入的单据标志位都不同就好辦了.
    例如,w_a傳入'01',w_b傳入'02'.
      

  2.   

    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;
      

  3.   

    :)
    是的.
    所有的窗體用的號全在billtable這張表中.
    然後我判斷日期如果是新的一天就從'01'開始,否則用表中的號.
    喔,忘了告訴你,你取到號後,在存到你的主表中去時,
    別忘了將flowno加1存進去.
      

  4.   

    是將flowno加1存到billtable中去.
      

  5.   

    建议程序做如下修改:
    1.8位日期的组成可以简化为to_char(sysdate,'YYYYMMDD')
    2.后两位可以使用Sequence
    最终的方法是to_char(sysdate,'YYYYMMDD')||单据号||to_char(sequence)
      

  6.   

    to guo(正在消化Oracle):
    1.我完全同意.
    2.
    這你就不知了.他的"单据标志位"是個固定的東西.
    比如窗口a一直用'01',窗口b一直用'02'
    而最後的"序号"他要求的是每天都從'01'開始.
    因此它們都不能用Sequence