各位高手看一下这个问题用存储过程可以解决吗?
总共3个存过程
GET_NM 取最大内码的存储过程(MAX_NM)
SQL: SELECT MAX(TO_NUMBER(NM) FROM DJ_BT 取出最大内码是'112'ADD_DJ_BT 增加表头的存储过程(带参数,需要调用GET_NM 中定义的MAX_NM)
ADD_DJ_BT(单据编号,单据日期,单位编号,备注).....
SQL:INSERT INTO DJ_BT(内码,单据编号,单据日期,单位编号,备注) values ('112',@单据编号,@单据日期,@单位编号,@备注)
ADD_DJ_BT2 增加表体的存储过程(带参数,需要调用GET_NM 中定义的MAX_NM)
ADD_DJ_BT2(物料编号,物料名称,数量,单价,金额)
SQL:INSERT INTO DJ_BT2(物料编号,物料名称,数量,单价,金额) values ('112',@物料编号,@物料名称,@数量,@单价,@金额)
请问在ADD_DJ_BT和ADD_DJ_BT2中可以调用GET_NM中的返回结果吗?Create proc add_dj_bt
  @内码 char(10),@单据编号 varchar(20),@单据日期 CHAR(8) ,@单位编号 char(8),@备注 char(40)
   as
 begin
    内码:='112';--------------如何使内码等于固定的从GET_NM中取出的MAX_NM值.
   insert into dj_bt(内码,单据编号,单据日期,单位编号,备注) Values(@内码,@物料编号,@物料名称,@数量,@单价,@金额)
   end add_dj_bt;刚开始学习ORACLE,还望各位高手详细指点.非常谢谢!

解决方案 »

  1.   

    create or replace procedure add_dj_bt(djbh in varchar2, djrq in varchar2, dwbh in varchar2, bz in varchar2) as 
      nm varchar2(10);
    begin
      nm := GET_NM;
      或者直接写 sql 
      select MAX(TO_NUMBER(NM)) into nm FROM DJ_BT;   insert into dj_bt(内码,单据编号,单据日期,单位编号,备注)Values(nm,djbh,djrq,dwbh,bz); end;
      

  2.   

    那么是不是GETNM中就执行了.比方说我执行完GETNM后是112吧,
    我在ADD_DJ_BT2存储过程中调用GETNM也是112,如果我在执行一遍SQL的话就变成113了.
      

  3.   

    如果你要这样的话 ADD_DJ_BT2 ADD_DJ_BT 写在一起好了 或者在这两个过程里面 加一个输入参数 把这个内码 传进去 然后 在写一个存储过程 create   or   replace   procedure   add_dj(djbh   in   varchar2,   djrq   in   varchar2,   dwbh   in   varchar2,   bz   in   varchar2)   as   
        nm   varchar2(10); 
    begin 
        nm   :=   GET_NM; 
        或者直接写   sql   
        select   MAX(TO_NUMBER(NM))   into   nm   FROM   DJ_BT;       add_dj_bt(nm,,,,,); 
        add_dj_bt2(nm,,,,,);
    end;
    这样你只要执行 add_dj一个过程就可以了     end;