Locking issue from multi thread

From: vijay <vksinghbhu_at_gmail.com>
Date: Sun, 30 Dec 2007 20:51:31 -0800 (PST)
Message-ID: <85d45713-4aec-4de0-b5c8-ab6808cc827b@i29g2000prf.googlegroups.com>


UI Tool : VC 2005,
Database: oracle
OS - Window XP

Hi Everyone,

Given stored procedure generate new key for given key name.

CREATE OR REPLACE PROCEDURE "ABILOGS"."SP_GETNEWLOGKEY"     (strkeyname IN VARCHAR2,nkeyvalue OUT NUMBER) is
begin
  declare

       cursor cur is select keyvalue from logkey where keyname=strkeyname for update of keyvalue;

       nValue integer;
  begin

      open cur;
      fetch cur into  nValue;
      if cur%notfound then
           insert into logkey values(strkeyname, 1);
           nkeyvalue := 1;
      else
             begin
                 nValue := nValue+1;
                 update logkey set keyvalue=nValue where current of
cur;
                 nkeyvalue := nValue;
             end;
      end if;
      close cur;

   end;
   commit;

exception
WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered while executing SP_GETNEWLOGKEY - '||SQLCODE||' -ERROR- '||SQLERRM);

end SP_GETNEWLOGKEY;

Stored procedure uses a table Logkey with two column names Keyname(varchar2) and Keyvalue(number).

When i call SP_GETNEWLOGKEY from two different sessions, stored procedure generate key perfectly. Ex.

declare nkeyvalue NUMBER;
call SP_GETNEWLOGKEY("xyz", nkeyvalue); from session 1 call SP_GETNEWLOGKEY("xyz", nkeyvalue); from session 2

I am facing issue when two different threads call SP_GETNEWLOGKEY for same key name from same session. Ex.

declare nkeyvalue NUMBER;
call SP_GETNEWLOGKEY("xyz", nkeyvalue); from session 1 call SP_GETNEWLOGKEY("xyz", nkeyvalue); from session 1

In this case program generate duplicate key (not always). I have noticed that oracle provide lock at different session level not at thread level. Is there any way to acquire lock at different thread level?

It will be great help if i get response from any one.

Thanks in advance.

Vijay Received on Sun Dec 30 2007 - 22:51:31 CST

Original text of this message