我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才好

解决方案 »

  1.   

    先设个变量v_count,
     SELECT count(*) into v_count FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update; 
    if v_count==1就执行
      

  2.   


    用了count函数就不能用for update的,你这样写编译通不过的
      

  3.   

    分开写,简单写一下:
    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;
      

  4.   

    SELECT count(*) into v_count FROM "_T_Sequences" WHERE "Seq_TableName" = tableName for update; 
    这句还用for update吗,去掉不行么
      

  5.   


    在查不到数据时我要往"_T_Sequences"表中插入一条记录的,如果去掉的话并发产生的话会报错的