下边这个存储过程 从一个表里 取出一个字段值 取出之前 先做+1的操作。
如果多个程序同时运行这个存储过程,会出现取出的值是重复的情况吗?
就大神指点。
create or replace procedure SP_GetXmInc(pTableName in nvarchar2,
pFieldName in nvarchar2,
pCondition in nvarchar2,
cur_OUT OUT SYS_REFCURSOR) is
v_sql VARCHAR2(8000);
begin
savepoint sp_begintran;
v_sql := 'lock table ' || pTableName || ' in exclusive mode';
execute immediate v_sql;
v_sql := 'update ' || pTableName || ' set ' || pFieldName || ' = ' ||
pFieldName || ' + 1';
if (pCondition is not null) then
v_sql := v_sql || ' where ' || pCondition;
end if;
execute immediate v_sql;
v_sql := 'select ' || pFieldName || ' from ' || pTableName;
if (pCondition is not null) then
v_sql := v_sql || ' where ' || pCondition;
end if;
open cur_OUT for v_sql;
commit;
exception
when others then
rollback to sp_begintran;
end SP_GetXmInc;
------解决方案--------------------
直接在命令行输入锁表命令和update,不要COMMIT,
再打开一个窗口进行update。
这样你可以模拟出多个session操作