版主這是用sql語句寫的一個存儲過程﹐它在sqlserver中倒是可以﹐不過在oracle中就有
問題了
首先所有的變量都沒有了'@'標識符﹐直接用名稱即可
所有的賦值語句都為:=  (例﹕變量Da:='aa')﹐select/set都不能做為賦值用
全局變量@@error不存在
錯誤提示語句RAISERROR('生成客户登记号失败!', 1, 2);
應該是RAISE_APPLICATION_ERROR(-20009,'生成客户登记号失败!')

解决方案 »

  1.   

    存儲過程的執行為  execute pro1
      

  2.   

    补充几点:1.
    declare date1 datetime; 中将declare 去掉。2.
    SELECT @date1=chenyong.tablename.date1,   
            @count1=chenyong.tablename.count1  
            FROM  chenyong.tablename;
    改为:
    select a, b INTO 变量1,变量2 FROM ...;3. 用 IF    THEN4.
    begin tran t1; 不用显式的开始事务。只要记住一个事务结束时写上Commit就行。
      

  3.   

    建议版主先去看看语法,oracle的存储过程与SQLServer还是有很大的区别的,你这完全是从Sqlserver上搬过来的。另外在oracle中调用存储过程时直接用存储过程名即可
      

  4.   

    ( returnid out varchar(14) ) as
     date1 chenyong.new_guestid.date1%type;
     count1 chenyong.new_guestid.count1%type;--本存储过程用于获取新的客户ID
    begin
     SELECT date1,count1  into date1,count1 FROM  chenyong.new_guestid;
     if date1!=(sysdate,`yyyymmdd`) then       UPDATE  chenyong.new_guestid
           SET count1 = 1,date1=(sysdate,`yyyymmdd`);
          else
     UPDATE  chenyong.new_guestid
       SET count1 =count1 + 1;
                 
     SELECT date1, count1  into date1, count1
       FROM chenyong.new_guestid; 
     end if 
     returnid:='A'||(concat((trunc(sysdate,`dd`),`yyyymmdd),replace(to_char(count1,4),' ','0')));
     end;