这是在oracle9i下写的存储过程,已经用了好几年了,程序调用都没有问题,最近更新成oracle 10g,程序调用时会出现第一次失败,接着第二次成功,不知道为什么,接着把Set Transaction Read  Write;这句去掉就没有任何问题了,请问这个oracle的参数配置还是什么有关系啊,以下是实际用到的函数,急切需要解决这个问题,谢谢!!!
CREATE OR REPLACE Function Get_CFH(
CFH       VARCHAR2
)
RETURN VARCHAR2 IS
 Code     VARCHAR2(10);
 Num      Number;
 Str      VARCHAR2(10);
BEGIN
  Select VPAR_VALUE into Code from R_Params where VPAR_NAME=CFH;
  Num := to_Number(substr(Code,7,4));
  Num := Num+1;
  Code := SubStr(Code,1,6);
  Str := To_Char(sysdate,'YYMMDD');
  if Str<>Code then
     Code := Str;
     Num  := 1;
  end if;
  Str := Trim(To_Char(Num,'0000'));
  Set Transaction Read  Write;
  Update R_Params set VPAR_VALUE=Code||Str where VPAR_NAME=CFH;
  Commit;
  Return Code||Str;
EXCEPTION
  when others then
    Rollback;
    Return '1';
END Get_CFH;
/

解决方案 »

  1.   

    没有遇到过这个问题。
    但是Oracle 10g来说,
    set transaction read write 虽然也有、
    但是好像叫做set transaction read write reserving ... 的吧
      

  2.   

    晕死,这个存储过程怎么可能能正常运行啊set transaction read write这个是sqlplus里面的命令,不是Oracle的内部语句,存储过程怎么能够识别呢?
      

  3.   

    设置ALTER DATABASE ADD SUPPLEMENTAL LOG DATA