这是在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;
/
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;
/
但是Oracle 10g来说,
set transaction read write 虽然也有、
但是好像叫做set transaction read write reserving ... 的吧