FOR UPDATE NOWAIT Fails to Detect Lock

Locking a bitmap indexed row would cause other rows locked. I heard that, if FOR UPDATE NOWAIT is used on these accidentally locked rows (Oracle SQL High Performance Turning by Prentice hall), it may not be able to detect the lock. Is it true? I cannot find related documenation from Oracle's manual. And, what should we do to prevent an incorrect lock status returned by FOR UPDATE NOWAIT?

SELECT FOR UPDATE NOWAIT detects locks affected DATA blocks.
Look the example below:
SQL> create table t1 (id number, bit_col number);
Table created.
SQL> begin
  2  insert into t1 values(0,1);
  3  insert into t1 values(1,1);
  4  insert into t1 values(2,2);
  5  insert into t1 values(3,3);
  6  insert into t1 values(4,4);
  7  end;
  8  /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> create bitmap index t1_bit on t1(bit_col);
Index created.Now in session 1 we change the bitmap-indexed column and it affects
index node:
SQL> update t1
  2  set bit_col = 4
  3  where id = 2;
1 row updated.In accordance to bitmap index structure this operator locks the index section
the locked row pertains to:
2th session waits for the lock release even when it tries to lock another row -
two rows pertain to the same index section which is locked by the first session:
SQL> update t1
  2  set bit_col = 2
  3  where id = 3;After rollback in the first session the second one gets the resource:
SQL> update t1
  2  set bit_col = 2
  3  where id = 3;
1 row updated.Now lets do rollback in both and repeate the first UPDATE in the first session:
SQL> update t1
  2  set bit_col = 4
  3  where id = 2;
1 row updated.In the second session we can lock the row (not index section) using
SELECT FOR UPDATE:(in contrast with UPDATE statement which changes
indexed column):
SQL> select * from t1 where id=3 for update nowait;
        ID    BIT_COL
         3          3But certainly we detect row-level lock in the data block for ID = 2:
SQL> select * from t1 where id=2 for update nowait;
select * from t1 where id=2 for update nowait
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specifiedRgds.

Similar Messages

  • Should i use SELECT for update NOWAIT ?

    Hi:
    Do I need to use, in my pl/sql triggers and procedures, the SELECT FOR UPDATE NOWAIT sentence, to avoid locks before using update table sentences ? Is it common to use it on stored procedures and triggers?
    Thanks
    Joao Oliveira

    First, what, exactly do you mean by "avoid locks"? I was interpreting that to mean "I want to avoid creating locks in my session that might block someone else", not "I want to avoid having my SELECT wait for locks to be released-- I want it to fail immediately". If you meant the latter, then SELECT ... FOR UPDATE NOWAIT would be what you want. If you meant the former, then pessimistic locking is not what you want.
    Second, what sort of Oracle Forms architecture do you have? Are you still using old-school client-server applications? Or are you using a three-tiered approach? As Tom discusses in that thread, pessimistic locking is only an option when your client application is able to maintain database state across calls (i.e. client/server systems) not when you have stateless connections (which is the norm in the three-tier model). The old client-server versions of Forms would automatically and transparently do pessimistic locking. Since you didn't mention anything about your architecture, most of us probably assumed the more common stateless client architecture (note how Tom's answers progress over the 5 years in that thread as client/server architecture became less and less common).
    Third, while your question is appropriate for either the Database - General forum or the SQL and PL/SQL forum, that generally means that you are free to post it either forum, not that it should be posted in both. The vast majority of the folks that hang out in one forum hang out in the other. It's also rather frustrating to answer a post in one forum only to discover that there is another post in a different forum where someone else had already covered the same points half an hour earlier or to discover that there was additional information in another thread that might have changed your answer.
    Fourth, if you are going to do pessimistic locking, that requires that you are able to maintain state across various database calls, that you are locking on the lowest possible level of granularity, and that you are able to time out sessions relatively aggressively to ensure that someone doesn't open a record, thereby locking it, go to lunch (or have their system die) and then block everyone else from working. Assuming that is the case, and that you have some reasonable way to handle the error that gets generated other than simply retrying the operation, adding NOWAIT is certainly an option. Most applications, particularly those getting written today, cannot guarantee all these things, so pessimistic locking is generally not appropriate there.
    Looking at your other thread (where there is new information that would be useful in this discussion, one of the reasons that multiple threads are generally a bad idea), it seems that you have an ERP application and you are concerned about the performance of entering orders. Obviously, there shouldn't be any locking issues on the ORDER or ORDER_DETAILS tables, assuming that multiple users aren't going to be inserting the same order at the same time. The contention would almost certainly come when multiple orders are trying to update the STOCK and INVENTORY tables, since multiple orders presumably rely on the same rows in those tables. In that case, I'm not sure what adding a NOWAIT would buy you-- unless you were going to roll back the entire order because someone is updating the STOCK row for #2 pencils and your order has an item of #2 pencils, you'd have to keep retrying the operation until you were able to modify the STOCK row, which would be less efficient than just letting that update block until the row was free.
    Now, you could certainly redesign the application to minimize that contention by not trying to update what I assume are aggregate tables like STOCK and INVENTORY directly as part of your OLTP processing or, at least, by minimizing the time that you're locking a row. You could, for example, make STOCK and INVENTORY materialized views rather than tables that refresh ON COMMIT, which should decrease the time that your locks are held. You could also have those tables refreshed asynchronously, which would be even more efficient but may require that you reasses your holdback requirements.
    Justin

  • Windows Update Client failed to detect with error 0xc8000247 after using Lenovo System Update 5

    My Windows 7, SP1 was running fine, until I installed few updates on 10/15 using Lenovo System Update 5 then Windows Update stopped working, shows as RED:
    {CE3119AD-35EF-41CF-9C21-C7698FEB8393}    2013-10-14 21:53:00:256-0700    1    147    101    {00000000-0000-0000-0000-000000000000}    0    0    AutomaticUpdates    Success    Software Synchronization    Windows Update Client successfully detected 4 updates.
    {EB17A01A-EB6E-49FF-9EA2-AA0DD063B4B1}    2013-10-15 04:15:54:069-0700    1    162    101    {C61A0D00-3E51-48AC-B0AF-1D3E02B9E5D3}    201    0    AutomaticUpdates    Success    Content Download    Download succeeded.
    {77DAE88F-2795-4258-8BBF-8D27E53662CF}    2013-10-15 12:10:38:196-0700    1    193    102    {00000000-0000-0000-0000-000000000000}    0    0    AutomaticUpdates    Success    Content Install    Restart Required: To complete the installation of the following updates, the computer must be restarted. Until this computer has been restarted, Windows cannot search for or download new updates:  - Security Update for Windows 7 for x64-based Systems (KB2862330)
    {1398F777-3AEF-4D1D-BE4C-407EC4AEAD4C}    2013-10-15 12:15:25:676-0700    1    183    101    {C61A0D00-3E51-48AC-B0AF-1D3E02B9E5D3}    201    0    AutomaticUpdates    Success    Content Install    Installation Successful: Windows successfully installed the following update: Security Update for Windows 7 for x64-based Systems (KB2862330)
    {A220898A-E5FE-4FE7-8413-2B0C7B4013D0}    2013-10-15 12:15:25:766-0700    1    202    102    {00000000-0000-0000-0000-000000000000}    0    0    AutomaticUpdates    Success    Content Install    Reboot completed.
    {A5400FF2-33ED-4A47-8409-13E5DFE16A6D}    2013-10-15 19:29:31:486-0700    1    147    101    {00000000-0000-0000-0000-000000000000}    0    0    ChkWuDrv    Success    Software Synchronization    Windows Update Client successfully detected 0 updates.
    {43C533EE-775D-445E-A652-06648B72DE65}    2013-10-15 19:29:49:702-0700    1    147    101    {00000000-0000-0000-0000-000000000000}    0    0    ChkWuDrv    Success    Software Synchronization    Windows Update Client successfully detected 0 updates.
    {D6AAAFFB-7F18-4A7E-B39D-1BA09CDC5E6D}    2013-10-15 19:30:05:744-0700    1    147    101    {00000000-0000-0000-0000-000000000000}    0    0    AutomaticUpdates    Success    Software Synchronization    Windows Update Client successfully detected 3 updates.
    {4E73B1C1-5BA2-415D-AB34-92F7AB3DB418}    2013-10-15 19:30:08:753-0700    1    147    101    {00000000-0000-0000-0000-000000000000}    0    0    ChkWuDrv    Success    Software Synchronization    Windows Update Client successfully detected 0 updates.
    {51248882-41AC-4E59-B813-87AD326310AD}    2013-10-15 20:00:05:044-0700    1    183    101    {DBD3B4E9-0357-47DA-8317-D0CF2163BFE6}    501    0    wusa    Success    Content Install    Installation Successful: Windows successfully installed the following update: Hotfix for Windows (KB2661796)
    {FB2B8E5E-442C-4E76-B23D-6A41B4324C9D}    2013-10-16 00:11:39:832-0700    1    148    101    {00000000-0000-0000-0000-000000000000}    0    c8000247    AutomaticUpdates    Failure    Software Synchronization    Windows Update Client failed to detect with error 0xc8000247.
    Lenovo Thinkpad W500, Intel (R), Windows 7, SP1, latest updates as of Oct 15
    (1) Checked Setting,  set to automatic update whenever, even changed to never update, rebooted the OS and changed back to automatic update and rebooted the OS.
    (2) Stopped Windows Update Services, renamed SoftwareDistribution folder and started the window update services and rebooted.
    (3) Ran MS FIXIT
    (4) Ran System File checker Scan (sfc /scannow)
    (5) Ran CHKDSK /F
    (6) Installed "Intel Rapid Storage Technology" drivers from Lenovo site
    (7) Ran Update for Windows 7 for x64-based Systems (KB971033)
    None of the above possible recommended solutions were able to fix the issue yet and now I am getting a message your Window is Not Genuine!
    Any help or guidance is appreciated.
    Solved!
    Go to Solution.

    The Lenovo System Update installed the "Intel Matrix Storage Manager driver 8.9.2.1002" right before the Windows Upgrade got broken. So in the Device Manager under IDE ATA/ATAPI Controllers, I choose Intel ICH9M-E/M SATA AHCI Controller, on the Driver Tab, I choose the option "Roll Back Driver" and after rolling back the driver and restarting the OS, now Windows Update is working like a Champ!
    The End!

  • FOR UPDATE NOWAIT

    Hi
    Top Link supports FOR UPDATE NOWAIT with query hint query.setHint(TopLinkQueryHints.PESSIMISTIC_LOCK, PessimisticLock.LockNoWait);
    but this is proprietary to Oracle and is not supported with My Sql. I am interested to know how top link behaves when we use this query hint with My Sql.
    Top Link Gurus please respond. I would also like to know any pointers on how to make pessimist lock independent of databases using Top Link

    Well there is a bug, we get following error
    Internal Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOWAIT' at line 1
    Error Code: 1064
    hint for pessimist lock with NoWait doesnt work correctly for MySql

  • FOR UPDATE NOWAIT issue

    Oracle Version: 10.2.0.5
    O/S : Redhat
    Hi,
    I have a select statement that is wrapped in the FOR UPDATE NOWAIT clause. This is embedded in a stored procedure and this stored procedure may be called concurrently by multiple threads from a .net application.
    Off late i have noticed that the proc has been returning the same value to 2 different calls - this defeats the purpose of row-level locking that FOR UPDATE NOWAIT does. I did notice that the procedure calls from the .net application where 100th of a millisecond apart.
    Is there any workaround to avoid the same row being returned to different calls? or is this a known behaviour and i just have to live with it?
    Edited by: brainstormer on May 6, 2013 12:56 PM

    This is part of the SP that performs the lock, updates the queue table so that record is marked as In Process so it is not returned to another process when it is already In Process.
    Thought it may sound far fetched, my theory is that even before session 1 completes the SELECT statement, session 2 comes in and run the select statement. Since session 1 has not completed and has not locked the row yet - oracle returns the same row to both.
    Is this a possible scenario?
       PRAGMA AUTONOMOUS_TRANSACTION;
       lock_detected EXCEPTION;
       PRAGMA EXCEPTION_INIT(lock_detected, -54);
       BEGIN
            BEGIN
                SELECT q.request_id, q.process_id
                             INTO o_request_id, o_process_id
                  FROM PROCESS_QUEUE q
                 WHERE q.process_id IN (
                            SELECT process_id
                                FROM (
                                       SELECT l.process_id
                                         FROM PROCESS_QUEUE L,  REQUESTS r
                                        WHERE L.request_id = r.request_id
                                            AND r.manifest_only = NVL(io_manifest_only,r.manifest_only)
                                            AND r.status = 'INP'
                                            AND ((l.status IN ('PND', 'RTY') AND l.host_name IS NULL AND l.instance_name IS NULL)
                                              OR (l.status = 'INP' AND l.host_name = i_host_name AND l.instance_name = i_process_name))
                                             AND retry_count < i_retry_count
                                          ORDER BY r.updated_dttm asc, l.created_dttm asc
                                        WHERE
                                            ROWNUM =1)
             FOR UPDATE NOWAIT;
             EXCEPTION
              WHEN lock_detected THEN
                 NULL;
              WHEN NO_DATA_FOUND THEN
                 NULL;
           END;
          UPDATE PROCESS_QUEUE
             SET status = 'INP',
                 updated_dttm = sys_extract_utc(current_timestamp),
                 host_name = i_host_name,
                 instance_name = i_process_name
           WHERE process_id=o_process_id;
          COMMIT;
          END;

  • FOR UPDATE NOWAIT   and  ora-00054

    Dears
    my scenario is :-
    In a busy transaction system,in a procedure i am making first lock the transaction with FOR UPDATE NOWAIT in a query.
    Then I am checking some status and then i am doing the transaction.
    It was ok but sometimes i am facing "ORA-00054: Resource Busy and Acquire with NOWAIT Specified" this error.
    so, now how can i overcome this. or any alternative way please?
    Regards
    Halim
    Edited by: Abdul Halim on Mar 1, 2011 1:11 PM

    Abdul Halim wrote:
    Dears
    my scenario is :-
    In a busy transaction system,in a procedure i am making first lock the transaction with FOR UPDATE NOWAIT in a query.
    Then I am checking some status and then i am doing the transaction.
    It was ok but sometimes i am facing "ORA-00054: Resource Busy and Acquire with NOWAIT Specified" this error.
    so, now how can i overcome this. or any alternative way please?
    Regards
    Halim
    Edited by: Abdul Halim on Mar 1, 2011 1:11 PMThis is normal behavior.So when you use SELECT FOR UPDATE statement in this case oracle will exclusive row level lock according records.And if you use NOWAIT clause in this case oracle will not wait if these records/table locked by another users.In additionally you can use without NOWAIT clause then other users will wait(without errors) also you can set limit this waiting using DISTRIBUTED_LOCK_TIMEOUT initialization parameter.

  • Select or Select....for update nowait (data write concurrency issue)

    Hello everyone,
    I am working on a jsp/servlet project now, and got questions about which is the better way to deal with concurrent writing issues.
    The whole senario is described as following:
    First each user is viewing his own list of several records, and each record has a hyperlink through which user can modify it. After user clicks that link, there will be a popup window pre-populated with the values of that record, then user can do the modifications. After he is done, he can either click "Save " to save the change or "Cancel" to cancel it.
    Method1---This is the method I am using right now.
    I did not do any special synchronization measures, so if user 1 and user2 click the link of same record, they will modify the record
    at the same time, then whose updates will take effect depends on who submits the request later. If user1 submitted first, then user 2, user1
    will not see his updates. I know with this method, we will have the problem of "Lost Updates", but this is the simplest and efficient way to handle this issue.
    Method2--This is the method I am hesitating.
    I am considering to use "Select....for update nowait " to lock a record when user1 has selected one record and intended to modify it. If user2 wanted to modify the same record, he is not allowed. ( by catching the sql exception.)But the issue I am concerned about is because the "select .. For update" action and "Update action" are not so consecutive as many transaction examples described. There could be a
    big interval between " select " and "update" actions. You could not predict user's behavior, maybe after he open the popup window, it took him a while to make up his decision, or even worse, he was interrupted by other things and went away for the whole morning?.Then the lock is just held until he releases it.
    And another issue is if he clicks "cancel" to cancel his work, if I use method1, I don't need to interact with server-side at all, but if user method2, I still need to interact with the server to release the lock.
    Can someone give me some advice ? What do you do to deal with similar situation? If I did not make clear of the question, please let me know.
    Thanks in advance !
    Rachel

    Hi Rachel,
    Congratulation, you have found a way to overcome your programming business logic.
    Have you ever consider that the solution of using CachedRowset concept yet to be included in j2se 1.5 tiger next year too prove workable under the scenario , whereby you can disconnect from the database after you have execute your query and reconnect again if you have to do transactional activity later, so that the loading overhead as well as the data pooling activity could be well balanced off.
    Although rowset is still not an official API now, but its potential to me is worth consideration.
    I have written a simple but crude cut JSP programme posted on this forum under the heading "Interesting CachedRowset JSP code to share " to demonstrate the concept of CachedRowset and hoping that the Java guru or the developer could provide feedback on how to imporve on the programming logic or methodology.
    Thanks!!

  • [ORACLE 9] Select For Update Nowait - Managing the Nowait

    Hi,
    Our application ( Oracle E Business R11) has a Form that allows Updates.
    The problem is, when a user updates a record in the form, we want to prevent another user to open the same form, to avoid locks.
    So I thought that I could
    a) issue a 'select ...for update nowait',
    b) get a code from Oracle
    c )and use this code to prevent the form to be reopened.
    I tried catching the Nowait in the exception section but I cannot get it to work.
    Here is my code:
    declare
      v_var varchar2(40) := '---';
    lv_nom           tmp_delegue_jbm.del_nom%type;
    begin
    v_var := 'Phase 1';
    select   del_nom
    into     lv_nom
    from     tmp_delegue_jbm
    where    del_id = 3
    for update of del_nom nowait;
    dbms_output.put_line( 'Phase:  ' || v_var  );
    v_var := 'Phase 2';
    update tmp_delegue_jbm
    set del_nom = del_nom || ' in'
    where del_id = 3;
    dbms_output.put_line( 'Phase:  ' || v_var  );
    exception
       when others then -- Should deal with the nowait situation
             dbms_output.put_line( 'Error:  ' || v_var || ' - ' || sqlerrm );
    end;
    [End Code]
    Many thanks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Far easier to poke a value into memory using DBMS_APPLICATION_INFO.SET_ACTION or SET_MODULE and have any session calling the form check first to see of another session has it already opened. Just make sure your exception handlers clear the lock.
    http://www.morganslibrary.org/reference/dbms_applic_info.html

  • Difference between FOR UPDATE NOWAIT and no FOR UPDATE NOWAIT

    Hi,
    I have a quick question relating to the difference in SELECT statements and the use of FOR UPDATE NOWAIT.
    Example:
    If I query the following
    SELECT * FROM ZX_LINES WHERE APPLICATION_ID = :B4 AND ENTITY_CODE = :B3 AND EVENT_CLASS_CODE = :B2 AND TRX_ID = :B1
    / with binds parsed, the result in Autotrace is as follows:
    consistent gets     87
    consistent gets - examination     2
    consistent gets from cache     87
    However, if I query the following
    SELECT * FROM ZX_LINES WHERE APPLICATION_ID = :B4 AND ENTITY_CODE = :B3 AND EVENT_CLASS_CODE = :B2 AND TRX_ID = :B1
    FOR UPDATE NOWAIT
    / the results in Autotrace are:
    consistent gets     4341
    consistent gets - examination     2
    consistent gets from cache     4341
    db block changes     5894
    db block gets     5920
    db block gets from cache     5920
    So, I'm trying to understand why it happens that a FOR UPDATE NOWAIT requires so many more consistent gets, as opposed to not using a FOR UPDATE?

    >
    So, I'm trying to understand why it happens that a FOR UPDATE NOWAIT requires so many more consistent gets, as opposed to not using a FOR UPDATE?
    >
    The main difference is that when you use FOR UPDATE Oracle has to LOCK each row.
    How many rows will your query return?
    Did you notice that in the second example ALL of the consistent gets were from the cache?
    Did you notice all of the block gets? And that ALL of them were from the cache?

  • Bought a new iMac 27" yesterday.  Attempting to download Adobe Creative Suite 5 Design Premium. Loaded software from discs. When I check for updates they fail to install. A window comes up saying "Some updates failed to install." Then under each applicati

    I bought a new iMac 27" yesterday, running with Mavericks OS.  Attempting to download Adobe Creative Suite 5 Design Premium. Loaded software from discs. When I check for updates they fail to install. A window comes up saying "Some updates failed to install." Then under each applications it says "There was an error downloading this update. Please quit and try again later." Have done this several times. Suggestions?

    update manually,:  http://www.adobe.com/downloads/updates/

  • SELECT FOR UPDATE NOWAIT

    Hi everyone!
    I have procedure that looks like this:
    procedure set_expired_users(
        p_QID   integer,
        p_Value integer default 1)
      is
        l_mdate timestamp(3) := null;
      begin
        l_mdate := get_mdate(p_Value);
        MERGE INTO cached_lists cl
        USING (SELECT distinct s.rootof as list_id, p_Value as is_expired, l_mdate as mdate
               FROM   zzz_userrelflat f, zzz_users u, zzz_temp_nn z, speclists s, lists_table lt
               WHERE  u.grp <> 1
                      AND f.userm = u.id
                      AND lt.id = z.id
                      AND f.userg = lt.ra
                      AND z.qid = p_QID
                      AND userm <> -2
                      AND s.ruser = userm) t
        ON (cl.list_id = t.list_id)
        when matched then
          UPDATE SET cl.is_expired = t.is_expired, cl.mdate = decode(t.mdate, null, cl.mdate, t.mdate)
        when not matched then
          INSERT VALUES (t.list_id, t.is_expired, l_mdate);
      end set_expired_users;As you can see there is no commit, commit executes in other stored procedures after that. in some cases I have bottleneck(enq TX), I rewrote procedure:
      procedure set_expired_users(
        p_QID   integer,
        p_Value integer default 1)
      is
        l_mdate timestamp(3) := null;
        busy_lock exception;
        PRAGMA exception_init(busy_lock,-54);
          cursor cur_upd  is
        SELECT 1 from cached_lists cl where cl.list_id in (SELECT distinct s.rootof as list_id
               FROM   zzz_userrelflat f, zzz_users u, zzz_temp_nn z, speclists s, lists_table lt
               WHERE  u.grp <> 1
                      AND f.userm = u.id
                      AND lt.id = z.id
                      AND f.userg = lt.ra
                      AND z.qid = p_QID
                      AND userm <> -2
                      AND s.ruser = userm) FOR UPDATE NOWAIT;
      begin
      open cur_upd;
        l_mdate := get_mdate(p_Value);
       MERGE INTO cached_lists cl
        USING (SELECT distinct s.rootof as list_id, p_Value as is_expired, l_mdate as mdate
               FROM   zzz_userrelflat f, zzz_users u, zzz_temp_nn z, speclists s, lists_table lt
               WHERE  u.grp <> 1
                      AND f.userm = u.id
                      AND lt.id = z.id
                      AND f.userg = lt.ra
                      AND z.qid = p_QID
                      AND userm <> -2
                      AND s.ruser = userm) t
        ON (cl.list_id = t.list_id)
        when matched then
          UPDATE SET cl.is_expired = t.is_expired, cl.mdate = decode(t.mdate, null, cl.mdate, t.mdate)
        when not matched then
          INSERT VALUES (t.list_id, t.is_expired, l_mdate);
            close cur_upd;  
          exception
      when busy_lock then
        null;
      end set_expired_users;Is this a good method to exclude enq TX?
    Sincerely,
    Pavel.

    In my opinion, you shouldn't rewrite that procedure, but you should rethink (ie. streamline) the overall transaction and try to reduce the wait times between the procedure call and the commit/rollback.

  • Help, question about "select ... for update nowait"

    There is a proc code. In the beginning of the code, I used a SQL "select ... for update nowait" in order to prevent from another proc executing at the same time. When the case happens, "-54, ORA-00054: resource busy and acquire with NOWAIT specified" will be printed in the screen.
    But there is a question: I need to print sth to indicate "another proc is running". I used "if (sqlca.sqlcode == -54)" as precondition, such as:
    if (sqlca.sqlcode == -54) {
    printf("There is another proc running.\n");
    However, this line will not be printed. I doubt that the code quits directly when using "select ... for update nowait" so as not to set value (-54) to sqlca.sqlcode.
    So, could you suggest whether there is another way that I can use to print "There is another proc running" when another proc is running?
    Thx a lot for your kindly reply.

    Yes, that link. Scroll down a bit and you will see:
    The calling application gets a PL/SQL exception, which it can process using the error-reporting functions SQLCODE and SQLERRM in an OTHERS handler. Also, it can use the pragma EXCEPTION_INIT to map specific error numbers returned by raise_application_error to exceptions of its own, as the following Pro*C example shows:
    EXEC SQL EXECUTE
    /* Execute embedded PL/SQL block using host
    variables v_emp_id and v_amount, which were
    assigned values in the host environment. */
    DECLARE
    null_salary EXCEPTION;
    /* Map error number returned by raise_application_error
    to user-defined exception. */
    PRAGMA EXCEPTION_INIT(null_salary, -20101);
    BEGIN
    raise_salary(:v_emp_id, :v_amount);
    EXCEPTION
    WHEN null_salary THEN
    INSERT INTO emp_audit VALUES (:v_emp_id, ...);
    END;
    END-EXEC;
    This technique allows the calling application to handle error conditions in specific exception handlers.

  • Ansi SQL for "select ... for update nowait"

    Hi, All,
    I have a sql
    select ... for update nowait
    My boss wants it to be ANSI compliant.
    I am not familiar with ANSI SQL.
    What should be the syntax in Ansi?
    Thanks a lot!

    I resent having the lowest salary :-)Sorry John, it's probably due to the exchange rate of sterling against the canuck dollar right now.
    SQL> select empno, ename, sal, job, mgr from emp;
         EMPNO ENAME             SAL JOB              MGR
          7369 SPENCER           800 CLERK           7902
          7499 VERREYNNE        1600 SALESMAN        7698
          7521 VAN WIJK         1250 SALESMAN        7698
          7566 MAINGUY          2975 MANAGER         7839
          7654 KISHORE          1250 SALESMAN        7698
          7698 BARRY            2850 MANAGER         7839
          7782 BOEHMER          2695 MANAGER         7839
          7788 PADFIELD         3000 ANALYST         7566
          7839 SCHNEIDER        5500 PRESIDENT
          7844 GASPAROTTO       1500 SALESMAN        7698
          7876 CAVE             1100 CLERK           7788
          7900 CLARKE            950 CLERK           7698
          7902 JAFFAR           3000 ANALYST         7566
          7934 ROBERTSON        1430 CLERK           7782
    14 rows selected.
    SQL> Cheers, APC

  • JDBC-thin on Solaris 2.7, 1002 on "FOR UPDATE NOWAIT"

    Has there been a patch to allow SELECT... FOR UPDATE NOWAIT
    in the jdbc thin connection layer?
    I have a program which runs transactions against Oracle 7.3 or
    8.05, and I'm finding that it works fine on my NT workstation
    against, 7.3.4....
    But when I run it against oracle 8.0.5 from a Solaris 2.7 system,
    I'm getting ORA-1002 errors whenever I select for update nowait.
    I'm oracle has a fix for this, but I haven't seen it yet.
    I did see a message about BUG 597589 posted on 02-Sep-1998.
    Was this ever fixed? The BUG database makes no mention of it.
    The only work-around seems to be to set autocommit, but I suspect
    that will lead to deadlocks in my application, if it even works!
    Has anyone else dealt with this problem?
    Thanks in advance,
    Kevin Fries
    null

    Has there been a patch to allow SELECT... FOR UPDATE NOWAIT
    in the jdbc thin connection layer?
    I have a program which runs transactions against Oracle 7.3 or
    8.05, and I'm finding that it works fine on my NT workstation
    against, 7.3.4....
    But when I run it against oracle 8.0.5 from a Solaris 2.7 system,
    I'm getting ORA-1002 errors whenever I select for update nowait.
    I'm oracle has a fix for this, but I haven't seen it yet.
    I did see a message about BUG 597589 posted on 02-Sep-1998.
    Was this ever fixed? The BUG database makes no mention of it.
    The only work-around seems to be to set autocommit, but I suspect
    that will lead to deadlocks in my application, if it even works!
    Has anyone else dealt with this problem?
    Thanks in advance,
    Kevin Fries
    null

  • When I launch my iTune 10.6.1 , it suggests an update to 10.6.3 . But when I click to update , it fails to detect any latest version . Anyone can help ? Thanks .

    When I launch my iTune 10.6.1 , it suggests an update to 10.6.3 . But when I click to update , it fails to detect any latest version . Anyone can help ? Thanks .

    or download the standalone installer here:
    http://www.apple.com/itunes/download/
    Regards.

Maybe you are looking for

  • Iphone 5 voice memo retrieval

    I trimmed my voice memo in error. how can i retrieve the original recording? i did not back up the phone prior to trimming it. help. need the original recording.

  • I can't print a bank document in Version 8.0 that I could in 6.1.

    When I had Firefox Version 6.1, I was able to print out my bank statement. I upgraded to Version 8.0 and the print command had a message. It said "Prop Res DLL Not Loaded. I then went back to Version 6.1 and the print worked. About a month ago, I upg

  • To recover DBA password of Oracle 9.2.0.1 on Windows 2000

    Hi, I have forgot the the passwords of DBA Id's ( sys & system ) .Do you know anyway to recover this password . I am logging in with the id with which I installed oracle and all.. with thanks and regards Ranjeesh K R

  • Fusesmb always connect timed out

    Hi All:    I come across a problem which confused me for days.    I just install the fusesmb to share the file with window.    I followed the instructions at this website http://ubuntuforums.org/showthread.php?t=300310, but didn't success.    I can o

  • Has anyone upgraded a LP 7 Not For Resale to LP 8 ?

    I am thinking of buying the upgrade version of Logic Studio (LP8) and I have a LP 7.2.3 "Not For Resale" version plus a LE 7.1.1 full commercial version,so I was wondering if the LP 7 NFR version is upgradeable or do I need to use the LE 7 version to