我orcale一个函数中要实现并发控制又要能控制查询的记录没有的情况,这样应该怎么写才能实现
如:
SELECT NVL("Seq_MaxID",0) INTO maxSequence FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update; 这样实现了并发控制,但如果查询记录没有时就要报no data found错误SELECT NVL(max("Seq_MaxID"),0) INTO maxSequence FROM "_T_Sequences" WHERE "Seq_TableName" = tableName ;这样写控制了查询记录为空的情况,但是并发控制就没有了,而用了max函数以后就不能用for update
应该怎么写这句SQL才好
如:
SELECT NVL("Seq_MaxID",0) INTO maxSequence FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update; 这样实现了并发控制,但如果查询记录没有时就要报no data found错误SELECT NVL(max("Seq_MaxID"),0) INTO maxSequence FROM "_T_Sequences" WHERE "Seq_TableName" = tableName ;这样写控制了查询记录为空的情况,但是并发控制就没有了,而用了max函数以后就不能用for update
应该怎么写这句SQL才好
SELECT count(*) into v_count FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update;
if v_count==1就执行
用了count函数就不能用for update的,你这样写编译通不过的
declare
v_count int;
begin
SELECT count(*) into v_count FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update;
if v_count ==1 then
SELECT NVL("Seq_MaxID",0) INTO maxSequence FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update;
else
dbms_output.put_line('没有数据');
end if;
end;
这句还用for update吗,去掉不行么
在查不到数据时我要往"_T_Sequences"表中插入一条记录的,如果去掉的话并发产生的话会报错的