create or replace procedure AppendNewBook(p_BarCode in varchar2,
                                          p_BOOKNAME in varchar2,
                                          p_PRICE in number,
                                          p_BookID out VarChar2) is  v_CNT Number(5);
  v_bookID Dict_BookCard.BookID%Type ;
  v_ISBN Dict_BookCard.Isbn%type;
  v_BarCode Dict_BookCard.IsbnBarCode%type;
begin
  /*如果书号、书名、定价一样就找出BOOKID直接返回*/
  v_BarCode := trim(p_BarCode);
  Select Count(BookID) Into v_CNT
    from Dict_BookCard 
   where Isbnbarcode = p_BarCode
     And BookName =p_BOOKNAME
     And Price = p_PRICE;
     
  if v_CNT  > 0 then
     Select Max(BookID) into p_BookID 
       from Dict_bookcard
      where Isbnbarcode = p_BarCode
        And BookName =p_BOOKNAME
        And Price = p_PRICE;
     return;   
  end if ;  
         
  if SubStr(p_BarCode,1,3) ='978' and Length(p_BarCode) = 13 then
    v_ISBN := SubStr(p_BarCode,4,9);
  else
    v_ISBN := p_BarCode;  
  end if;  
     
  Select Count(BookID) Into v_CNT 
  from Dict_BookCard
  where BookID Like v_ISBN||'%';
  
  if v_CNT < 9 then
    V_bookid := v_ISBN||'0'||to_Char(v_CNT+1);
  else
    V_bookid := v_ISBN||to_Char(v_CNT+1);
  end if;
  
  Insert Into Dict_BookCard(BookID,Isbnbarcode,Bookname,PRICE,CREATEDATE,SALEMODE,STORETYPE)
    Values(V_bookid,p_BarCode,p_BOOKNAME,p_PRICE,sysdate,'寄销','图书');
  
  p_BookID := v_BookID;
  
  commit;
  
end AppendNewBook;过程我测试过了,可以正常生成id序列号

解决方案 »

  1.   

    如果存储过程只有return的值
    程序里面改成
    ParameterDirection.ReturnValue
      

  2.   

    一时半会没看出什么问题,不过发现了一个小问题,就是存储过程中是Varchar2,你传的是Varchar,你看看会不会是这个问题。
      

  3.   

    按楼上说的,出来的值是"ReturnValue"  - -!还有哪里有问题
      

  4.   

    问题是.net这里面oracle type只有varchar,应该没有什么影响吧?如果有用什么替代?
      

  5.   

    存储过程测试过没有?能取出 p_BookID吗?
      

  6.   

    如果不行搞个ReturnValue 试试,不要用out。
      

  7.   

    再不行就用一句select p_BookID返回。
      

  8.   

    存储过程没有问题,可以取出p_bookid,我在plsql里调试过的,returnvalue返回的时候就给我返回了一个"returnvalue",郁闷啊
      

  9.   

    换种写法,还是一样,value怎么和参数名变成一样了......
      

  10.   

    哎,我没有oracle环境,不能具体调试,不好意思了。就算有也不懂oracle语法...寒-_-#!。楼主不要灰心一步一步慢慢来,不行就上网查查,或在这边等等热心人,问题肯定可以解决的。