Update table problem

Hello,
I want to update table building_test from table buildings if name is null or if county_id or region_id is null or -1
The below query works fine if my building_test table contains null values. if I add a test value with region or county -1, I get the error below.
Note: table building are in a remote DB. I just make it simple to post it to the forum.
Tha datatypes of the tables are OK.
Oracle is 9i
BEGIN
FOR i IN (
SELECT building_id, name, county_id, region_id
FROM buildings
WHERE building_id IN (SELECT building_id
FROM building_test
WHERE name IS NULL
OR county_id IS NULL
OR region_id IS NULL
OR county_id = '-1'
OR region_id = '-1'
LOOP
UPDATE building_test
SET name = i.name
WHERE building_id = i.building_id
AND name IS NULL;
UPDATE building_test
SET county_id = i.county_id
WHERE building_id = i.building_id
AND county_id IS NULL
OR county_id = -1;
UPDATE building_test
SET region_id = i.region_id
WHERE building_id = i.building_id
AND region_id IS NULL
OR region_id = -1;
END LOOP;
END;
Error starting at line 5 in command:
Error report:
ORA-01401: inserted value too large for column
ORA-06512: at line 17
01401. 00000 - "inserted value too large for column"
*Cause:   
*Action:
Any help will be much appreciated.
Thank you.

it's not always clear, what AND and OR combinations really do:
WHERE building_id = i.building_id
AND county_id IS NULL
OR county_id = -1;can mean
WHERE (building_id = i.building_id AND county_id IS NULL) OR county_id IS NULL 
*OR*
WHERE building_id = i.building_id AND (county_id IS NULL OR county_id IS NULL)try with brackets and post the result.

Similar Messages

  • "Error in updating Table J_1iexchdr"

    Hi ,
    When I am creating the excise invoice, It's terminated the program and gives the following error
    "Error in updating Table J_1iexchdr"
    What can be the reason?
    Regards
    Prem

    Hi prem
    Look if these threads can help
    RG23C Update Problem
    Problem in SAP Script
    billing document not creating
    return delivery
    ************Reward points if usefull**************

  • Bapi : BAPI_ALM_ORDER_MAINTAIN not updating table AFVU-USR08

    Hi,
    I have a requirement to update table AFVU-USR08.I am actualy dealing with tcode IW32/IW33 where in we need to update operation-->enhancement tab.I am using BAPI : BAPI_ALM_ORDER_MAINTAIN to do this.I am testing the BAPI directly( Not called in any program ),I can see a message like so and so order saved under notification,But there is no entry in table AFVU-USR08.
    If any one have come across this prob. and got the sol. Pl. share it with me.
    Your solution will be more helpful.
    Thanks,
    Bharani.

    Hi Ferry,
    1. I have also tried ur given code before BAPI_TRANSACTION_COMMIT.
        l_fname = 'SOBKZ'.
        l_fvalue = 'U'.
        CALL FUNCTION 'CO_BH_MOD_SINGLE_FIELDS'
          EXPORTING
            aufnr_imp = wa_meth-objectkey(12)
            field1    = l_fname
            value1    = l_fvalue.
    but this program is giving dump for only this particular Value saying that This is PROTECTED field.
    Can anyone help me out on How to Update Special Stock Indicator on Components Tab of Maintenance Order (IW32).
    If anyone has faced such type of problem & solved it then please let me also.
    2. Which BADI to use for Updating Special Stock Indicator when we press enter on Components tab in Transaction IW32 ?..
    Thanks in advance,
    Hope to get the solution soon from all SAP gurus.
    and help will be appriciated .
    Gaurav.

  • Help with UPDATE table and database RELATIONSHIPS

    HI there, I have been trying to create an update table for
    weeks now and keep getting error messages.
    The database has a table named:
    "books" in the table cells are "idbook" and "book".
    "suppliers" in the table cells are "idsupplier" and
    "supplierName".
    "category" in the table cells are "idcategory" and
    categoryName"
    They all have a relationships with this table:
    "results" in the cells are "idbook", "idsupplier" and
    "idcategory".
    This "results" table brings all of the above tables together.
    When I try to do an update, i am doing one to the results
    table. Is this correct?
    The updates have problems because when drawing the text to
    the update table to view it comes in text form.
    When trying to update, it wont becuase all of the cells in
    the results table are numeric. This is because of the
    relationships.
    Can anyone suggest where i may be going wrong.
    Ask anything you need to.
    TA

    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close
    If (MM_editRedirectUrl <> "") Then
    Response.Redirect(MM_editRedirectUrl)
    End If
    End If
    End If
    %>
    <%
    Dim Recordset1__MMColParam
    Recordset1__MMColParam = "1"
    If (Session("MM_UserName") <> "") Then
    Recordset1__MMColParam = Session("MM_UserName")
    End If
    %>
    <%
    Dim Recordset1
    Dim Recordset1_numRows
    Set Recordset1 = Server.CreateObject("ADODB.Recordset")
    Recordset1.ActiveConnection = MM_connSeek_STRING
    Recordset1.Source = "SELECT * FROM Query1 WHERE UserName = '"
    + Replace(Recordset1__MMColParam, "'", "''") + "'"
    Recordset1.CursorType = 0
    Recordset1.CursorLocation = 2
    Recordset1.LockType = 1
    Recordset1.Open()
    Recordset1_numRows = 0
    %>
    <%
    Dim rsUpdate
    Dim rsUpdate_numRows
    Set rsUpdate = Server.CreateObject("ADODB.Recordset")
    rsUpdate.ActiveConnection = MM_connSeek_STRING
    rsUpdate.Source = "SELECT * FROM tblSpecies"
    rsUpdate.CursorType = 0
    rsUpdate.CursorLocation = 2
    rsUpdate.LockType = 1
    rsUpdate.Open()
    rsUpdate_numRows = 0
    %>
    <%
    Dim Repeat1__numRows
    Dim Repeat1__index
    Repeat1__numRows = -1
    Repeat1__index = 0
    Recordset1_numRows = Recordset1_numRows + Repeat1__numRows
    %>
    <html>
    <head>
    <link href="css%20files/paragraph.css" rel="stylesheet"
    type="text/css">
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_preloadImages() { //v3.0
    var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new
    Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0;
    i<a.length; i++)
    if (a
    .indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
    //-->
    </script>
    </head>
    <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0"
    marginwidth="0" marginheight="0"
    onLoad="MM_preloadImages('images/Publicationb.gif','images/Factsheetsb.gif')">
    <table width="100%" height="100%" border="1"
    cellpadding="0" cellspacing="0" bordercolor="#5D5D5D">
    <tr>
    <td colspan="2">
    <div align="right"></div>
    <div align="left"></div>
    </td>
    </tr>
    <tr>
    <td colspan="2"><table width="100%" height="100%"
    border="0" cellpadding="0" cellspacing="0"
    bordercolor="#5D5D5D">
    <tr>
    <td valign="top"><form
    ACTION="<%=MM_editAction%>" METHOD="POST" name="form1">
    <table width="90%" border="0" align="center"
    cellpadding="0" cellspacing="0">
    <tr>
    <td valign="top"><div
    align="center"></div> <table border="1" align="center"
    cellpadding="2" cellspacing="0" bordercolor="#FFFFFF">
    <tr bgcolor="ECECD7">
    <td colspan="2"><div align="center">
    <p><strong><font size="3">Update Key Word
    &amp; Category</font></strong></p>
    </div>
    </td>
    </tr>
    <tr>
    <td><div align="center">
    <p><font size="1">Enter Up to 10 Species /
    Product
    Name</font></p>
    </div>
    </td>
    <td><div align="center">
    <p><font size="1">Select a
    Category</font></p>
    </div>
    </td>
    </tr>
    <tr>
    <td colspan="2" bordercolor="#D0D09D">
    <%
    While ((Repeat1__numRows <> 0) AND (NOT
    Recordset1.EOF))
    %>
    <table width="100%" border="0" cellspacing="0"
    cellpadding="0">
    <tr><td width="50%"><div align="center">
    <input name="f1" type="text" id="f13"
    value="<%=(Recordset1.Fields.Item("TimberSpecies").Value)%>"
    size="33">
    </div></td>
    <td width="45%"><div
    align="center"></div></td></tr></table>
    <%
    Repeat1__index=Repeat1__index+1
    Repeat1__numRows=Repeat1__numRows-1
    Recordset1.MoveNext()
    Wend %>
    <div align="center"> </div> <div
    align="center">
    </div></td></tr><tr>td
    colspan="2"> </td></tr><tr><td
    colspan="2"><div align="right"><p><font
    size="1">To Finalise Your Changes Please Press the Update
    Button      
    <input name="update2" type="submit" id="update"
    value="Update">
    <input type="hidden" name="MM_update" value="form1">
    <input type="hidden" name="MM_recordId" value="<%=
    rsUpdate.Fields.Item("TimberSpecies").Value %>">

  • How to update a table of contents when the feature "update table of contents" is unavailable?

    Hello folks,
    I've been struggling all morning with this issue and am completely desperate.
    First, some info:
    - I am making a spanish versions of an english documents: everything in the original doc was then edited, including TOCs. What I got at first, was a first spanish document already filled with spanish content.
    - I was not the primary creative of the document I'm workin on and am unable to get in touch with whoever that can be.
    - My document is a 200 pages text only document, with 12 chapters and, at the beginning of each chapter, a specific TOC for that very chapter.
    - Inside each chapter, there are only Sections and Subsections, no other style. Those are the two levels in the TOCs.
    - There is also a General TOC at the beginning of the document: that one only shows the Chapter names and the page number where to locate them.
    My problem:
    - Somewhere along the way, from one doc to another, the TOCs stopped to update the page numbers automatically.
    - Now I have sections and subsections that are shown in one page (for instance 204) but they actually are on page 135.
    - When I try to update the TOCs, I stand on the TOC itself as I was told in many tutorials, but the "update table of contents" feature is unavailable, even in the main TOC at the very beginning of the doc.
    It is like if I wasn't standing in the actual TOC, but there is no actual TOC anywhere that I could refer to.
    What can I do? I am changing the wrong page numbers manually but, of course, that is not ideal... and it may become more and more tricky while I keep producing new documents each based on the previous one.
    Any help will be much appreciated.
    Warm regard from sunny Paris, France!
    Sasha

    You've just confused me.
    My understanding of how this is set up is that either:
    This is a book, and there is a master TOC that includes all book documents and a document-specific TOC in each component file, or
    This is a single file and there is one master TOC that includes all sections and a section-specific TOC that includes only the individual section.
    In the first case, I think you would want two TOC styles set up, one that includes the chapter heads (if I understood how you said this worked) for the for the master, and you would include all docs in the book when you generate it, and a second style for the individual chapters, with the subheadings you want to include.
    In the second case, it would be similar, but instead of only one style to cover the section TOCS, I think you would need to create a unique set of pargraph styles for the headings in each section (they can all be the same format, based one section, just with unique names), and then make a TOC style for each section that includes only the styles from that section.
    OK,  wait a sec. I just reread what you said: "Another thing: when the numbers are "linked" and updating well, they  display indide a little box. Not a text box, but a kind of little frame  around the numbers. That frame makes it imposible to delete just one  number: when the TOC says that Section 6.1 is in page 135, for example,  you cannot delete just the 5, it deletes, not just the 3 numbers, but  also the doted tab."
    I think these are NOT normal TOCs created by using Layout > TOC (but you could replace them with ones that are, if you set up your styles properly and the text you want to include is appearing on the pages). Those little boxes you mention sound like cross-references, which should update automatically without any intervention at all. Unfortunately, cross-refs can be flakey, especially if they point to another document. I'd open the cross-refs panel and see if you need to recreate a bunch of links.

  • Updating table

    hi friends,
    i have one table in my application. i will update cells by enetering data into it. here the problem is after i typed digits i need to press
    ENTER or i need to press TAB to update the entered value into table cell. is there any way that without pressing ENTER or TAB to update table cell. and also i need to restrict max number of digits to 2. how can i do that. please help me in this proble. due to this a lot of bugs are coming for me.
    thanks and regard
    sriram

    hi sriram,
    Hope u might have implemented the key listener while typing if the in put key value of that cell is >2 put ,e.consume() will work out and further ur second query to update automatic is little bit odd any way u can do by fiering tableChangedListener in key pressed event .
    if u want brief help contact [email protected]

  • Error updating table 37

    HI,
    When I am generating a excise invoice the system triggers u201CError updating table 372"
    I have not maintained of table 372 in access seq (Cd type (JEXP) . Previous i have maintained this table in my access seq and its working fine but I am not able to save the document,
    in that time i got error like
    No account is specified in item 0000000001
    Message no. F5670
    Diagnosis
    No account was specified for account type "S" in item "0000000001" of the FI/CO document.
    System Response
    The Financial Accounting program cannot process the document.
    Procedure
    A system error has probably occurred in the application you called up. Check the data transferred to item "0000000001" of the FI/CO document.
    Pl let me know if anything else is required to avoid further problems
    All errors I have attached with screen shot pl give me reply .
    Pl let me know if anything else is required to avoid further problems
    Any possible solution for this?
    1 ) IN VKOA transaction G/L accounts which are assigned in our sales account keys with combination of condition table fields is :
    App CndTy. ChAc SOr AAG AAG ActKy G/L acct
    V KOFI CAIN ERRO 01 06 ERL 300009 Sales
    V KOFI CAIN ERRO 01 06 EXD 140014 CENVAT Clearing
    V KOFI CAIN ERRO 01 06 EXS 140009 Ed Cess
    V KOFI CAIN ERRO 01 06 MW3 140071 VAT
    V KOFI CAIN ERRO 01 06 MWS 140071
    V KOFK CAIN ERRO 01 06 ERL 300009
    V KOFK CAIN ERRO 01 06 EXD 140014
    V KOFK CAIN ERRO 01 06 EXS 140009
    V KOFK CAIN ERRO 01 06 MW3 140071
    V KOFK CAIN ERRO 01 06 MWS 140071
    In Customer account assignment group and material account assignment groups. Setting is correct
    in the IMG settings
    IMG>Logistics general>Tax on Goods movements>India>Account determination.
    What GL should be assign here
    Excise G/L A/c for RG23A BED CENVAT offset account Mod.Clerng
    ARE1
    ARE3
    DLFC   ?          ?                     ?                  ?                   ?
    EWPO ?          ?                    ?                   ?                  ?
    GRPO
    TR6C
    UTLZ
    Pl let me know if anything else is required to avoid further problems
    Regards
    SAPCO

    Solved. Thanks to....
    http://www.vecna.com/whatWeDo/projects/9ias-experience.html

  • U201CError updating table 372"

    HI,
    When I am generating a excise invoice the system triggers u201CError updating table 372"
    I have not maintained of table 372 in access seq (Cd type (JEXP) . Previous i have maintained this table in my access seq and its working fine but I am not able to save the document,
    in that time i got error like
    No account is specified in item 0000000001
    Message no. F5670
    Diagnosis
    No account was specified for account type "S" in item "0000000001" of the FI/CO document.
    System Response
    The Financial Accounting program cannot process the document.
    Procedure
    A system error has probably occurred in the application you called up. Check the data transferred to item "0000000001" of the FI/CO document.
    Pl let me know if anything else is required to avoid further problems
    All errors I have attached with screen shot pl give me reply .
    Pl let me know if anything else is required to avoid further problems
    Any possible solution for this?
    1 ) IN VKOA transaction G/L accounts which are assigned in our sales account keys with combination of condition table fields is :
    App CndTy. ChAc  SOr  AAG  AAG   ActKy G/L acct
    V   KOFI    CAIN   ERRO  01   06      ERL   300009  Sales
    V   KOFI    CAIN   ERRO  01   06      EXD  140014  CENVAT Clearing
    V   KOFI    CAIN   ERRO  01   06      EXS  140009  Ed Cess
    V   KOFI    CAIN   ERRO  01   06      MW3  140071  VAT
    V   KOFI    CAIN   ERRO  01   06      MWS  140071  
    V   KOFK   CAIN  ERRO   01  06      ERL    300009  
    V   KOFK   CAIN  ERRO   01  06      EXD   140014  
    V   KOFK   CAIN  ERRO   01  06      EXS   140009  
    V   KOFK   CAIN  ERRO   01  06      MW3   140071  
    V   KOFK   CAIN  ERRO   01  06      MWS   140071  
    In Customer account assignment group and material account assignment groups. Setting is correct
    in the IMG settings
    IMG>Logistics general>Tax on Goods movements>India>Account determination.
    What GL should be assign here
    Excise  G/L A/c  for RG23A  BED     CENVAT offset account               Mod.Clerng
    ARE1
    ARE3
    DLFC    ?            ?                      ?           ?          ?
    EWPO  ?           ?                       ?          ?          ?
    GRPO
    TR6C
    UTLZ
    Pl let me know if anything else is required to avoid further problems
    Regards
    SAPCO

    Hi
      If you are using subtransaction type then ensure the same setting as of without subtransaction type for ETT DLFC under CIN customization.
    I mean you should maintain same setting for ETT DLFC with and without subtransaction type.
    Also check the setting ETT  GRPO EWPO and DIEX should be same as with and without subtransaction type.
    Regards
    MBS

  • SQL Server 2005 Update mechanism problem

    Hi Gurus,
          We're faced with one SQL Server 2005 update mechanism problem. Here is my problem:
          According to our requirement, an add_on interface program is designed to execute creation of production order by calling Bapi.
          There are 3 steps in this add_on program:
          Step 1: Create production order
          Step 2: Change the information of production.
          Step 3: Some other
          After the step 1 has finished immediately step 2 is called, Howerver the information which should have inserted into database table couldn't be found from database. (Maybe because the time between two steps is too short to finish inserting)
          In order to ensure the complete of the transaction, before the step 2 executed, the information in step 1 should have inserted into database.
           Is there any solution to solve this problem?
           I guess whether there is any parameter which control the time of writing buffer into database...
    Any advice is appreciated.
    Thanks & Best Regards,
    Derek Yang

    Hi
    I have the same problem, but that post didnt help me
    This is the error I have:
    My snapshot agent hangs.. waiting for a response from the server.. and timeouts.
    This only hapens for a publication that has a filter based on HOSTNAME()
    The other publications work fine
    Error messages:
    Message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    Command Text: sp_MSsetup_partition_groups
    Parameters: @publication = XXXXXXX
    Stack: at Microsoft.SqlServer.Replication.AgentCore.ReMapSqlException(SqlException e, SqlCommand command)
    at Microsoft.SqlServer.Replication.AgentCore.AgentExecuteNonQuery(SqlCommand command, Int32 queryTimeout)
    at Microsoft.SqlServer.Replication.AgentCore.ExecuteDiscardResults(CommandSetupDelegate commandSetupDelegate, Int32 queryTimeout)
    at Microsoft.SqlServer.Replication.Snapshot.MergeSnapshotProvider.SetupPartitionGroups()
    at Microsoft.SqlServer.Replication.Snapshot.MergeSnapshotProvider.DoRegularMergeSnapshotPreparations()
    at Microsoft.SqlServer.Replication.Snapshot.MergeSnapshotProvider.DoPreArticleFilesGenerationProcessing()
    at Microsoft.SqlServer.Replication.Snapshot.SqlServerSnapshotProvider.GenerateSnapshot()
    at Microsoft.SqlServer.Replication.SnapshotGenerationAgent.InternalRun()
    at Microsoft.SqlServer.Replication.AgentCore.Run() (Source: MSSQLServer, Error number: -2)
    Get help: http://help/-2
    Server XXXXXXXXX, Level 11, State 0, Procedure , Line 0
    Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. (Source: MSSQLServer, Error number: -2)
    Get help: http://help/-2

  • Use of Update Table in Delta Extraction ....

    Hi all ,
           I have a small doubt regarding why there is an update table introduced between statistical table and delta queue in delta extraction process ... why not directly extract data from the statastical table and put it in to the delta queue .....
    Kindly help me regarding this ...
    Regards ,
    Santosh ....

    Hi Santosh,
    I think it is related to resource, batch and memory, problem. Infact you can use only delta queue if you select direct update, but you use this kind of update only for huge amount of data produced in a short period of time.
    The two queue let you divide transaction moment to batch collection moment.
    Hope this help.
    Ciao.
    Riccardo.

  • Update statement problem for jdbc adapter

    Hi all
    In the jdbc sender adapter, I configured as follows:
    Query statement
    select * from pickdiff where tid is null
    Update statement
    delete from pickdiff where tid is null
    I got following error message:
    Database-level error reported by JDBC driver while executing statement 'delete from pickdiff where tid is null'. The JDBC driver returned the following error message: 'java.sql.SQLException: [SQLServer 2000 Driver for JDBC][SQLServer]Die Unterabfrage gab mehr als einen Wert zurück. Das ist ungültig, wenn die Unterabfrage auf =, !=, <, <= , >, >= folgt oder als Ausdruck verwendet wird.'. For details, contact your database server vendor.
    If I change the Update statement to
    update pickdiff set tid = 'sapxi' where tid is null
    Then everything is ok.
    Doese any one have some idea about this problem?
    Regards
    Hui

    Hi,
    The below statements are from SAP help...
    http://help.sap.com/saphelp_nw04/helpdata/en/7e/5df96381ec72468a00815dd80f8b63/frameset.htm
    The UPDATE statement must alter exactly those data records that have been selected by the SELECT statement. You can ensure this is the case by using an identical WHERE clause. (See Processing Parameters, SQL Statement for Query, and SQL Statement for Update below).
    &#9679;      Processing can only be performed correctly when the isolation level for transaction is set to repeatable_read or serializable.
    SQL statement for query: SELECT * FROM table WHERE processed = 0;
    SQL statement for update: UPDATE table SET processed = 1 WHERE processed = 0;
    processed is the indicator in the database.
    please see if setting the isolation level would help....Also are you getting this error always or is it intermitent ?
    Thanks,
    Renjith

  • Update/Insert Problem with Oracle Warehouse Builder

    Hello,
    i have update/insert problem with owb.
    Situation: I have a source-table called s_account and a target table called w_account_d. In the target table are already data which was filled trough the source table inserts. Now anyone make changes on data on the target table. This changes should now give further on the source table with an update operation. But exactly here is the problem i can´t map back the data to source because that will create a loop.
    My idea was to set a trigger but i can´t find this component in owb or is anywhere hidden?
    Also i have already seen properties as CDC or conditonal loading in the property inspector of the table, but i have no idea how it works.
    Give it other possibilities to modeling this case? or can anyone me explain how i can implement this eventually with CDC?
    I look forward for your replies :)

    Hi
    thanks for your answer. I follow your suggestion and have set the constraints of both tables into the database directly.Nevertheless it doesn´t work to begin. In the next step i found by right click on a table the listpoint "configure" - I goes to "unique key" --> creation method and set here follow options: Constraint State = ENABLE, Constraint Validation = Validate. That error message that appears before by the deployment disappears yet. Now i start the job to test if the insert/update process works right. Finally it seems to work - but not really.
    My Testscenario
    1. Load the data from source table about the staging area to data warehouse table: Check - it works!
    2. Change one data record in source table
    3. Load the source table with changed data record once again to staging area: Check - it works!
    4. Load new staging area table with the changed data record to data warehouse table: Check it works! BUT, BUT i can not recognize if it is insert or update operation, then under the design window by jobs execution windows is reported "rows selected 98", Rows inserted" is empty and "rows updated" is empty. So i think works not correct, then my opinion if it works correct it should show be "rows updated" 1.
    What can yet now still be wrong or forgotten? Any ideas?
    *By the way think not 98 rows there is not important if you make an update or insert which performance. It is an example table the right tables have million of records.*
    I look forward for your answers :)

  • UPDATE QUERY can't update table

    Hi,
    During 1500-2000 concurrent users, DB Transaction locks occur. So that Update query can't update table and we get inconsistent data. How can we avoid this inconsistent data?? Why we get transaction locks??
    Eg. In update query it update the status of user with completed; but because of transaction lock  update query can't update status of user it remains uncompleted. So we can get wrong status of user(inconsistent data). Why UPDATE query update the status
    of user???
    update table set status='completed', date=@p2,score=@p3 where id=@p1

    You are not getting inconsistent data, you are getting the data according to the isolation level you are running under. The isolation level determines the locking model and therefore determines any bad dependencies you may experience. Reducing the bad dependencies
    through higher isolation level will lower concurrency. *This* is the core concept of Transactional Processing theory.
    Furthermore there is not really such a thing as a DB Transaction lock - at least not in the way you mean. SQL server does use DB locks (such as Shared transaction workspace and Exclusive transaction workspace) but the highest level of lock escalation is
    the object level (heap or btree) so those are the things you are really interested in. In the ideal would you want all Exclusive, Shared and U locks to be taken at the RID (heaps) or Key (cluster tables) level - and only have few of them per query.
    In conclusion think carefully about your query and how it is implimented under the covers by the database engine.
    Regards,
    Mark Broadbent.
    Microsoft Certified Master
    Contact me through twitter |
    blog | sqlcloud
    Please click "Propose as answer" if a post solves your problem
    or/and vote the post up if it's been helpful.

  • Autonomous Trigger / Mutating Table Problem

    We have a specific problem in one of our applications being developed where by the database needs to enforce a specific business requirement.
    We need to use a database trigger to enforce some data integrity which involves more than one table as such cannot use standard constraint. The integrity has to be maintained in the database as the DML statements may be coming from a Java application or PL/SQL code as such we need the logic all in one place.
    The problem being that within the trigger we need to examine the state of the table the trigger is associated with as well as one other table. Obviously using a trigger on a table that is being affected by DML statements causes the dreaded mutating table problem.
    One suggested solution to this was to make the trigger or the code the trigger called autonomous. This allows the trigger to execute by only showing the trigger the original state of the table before any of the DML statements have affected it.
    The problem is this seems to work for single row DML statements but not for multi row DML statements. In multi row the trigger only sees the original state of the table, not the state of the table plus the changes made by any other actions in the same DML statement.
    Below I have shown an example of what I'm seeing.
    I have grossly simplified the example code below to only refer to a single table and use stupidly simple logic
    I do realise i appear to be implementing uniqueness in my own PL/SQL code, this is purely for the example.
    CREATE TABLE mutate_test
    id INTEGER NOT NULL,
    value VARCHAR2(255) NOT NULL
    ALTER TABLE mutate_test ADD CONSTRAINT pk_mutate_test PRIMARY KEY(id);
    ALTER TABLE mutate_test ADD CONSTRAINT ck_mutate_test CHECK (value = UPPER(value));
    CREATE OR REPLACE FUNCTION duplicate_found(in_value IN mutate_test.value%TYPE) RETURN BOOLEAN IS
    PRAGMA AUTONOMOUS_TRANSACTION;
    v_value_found INTEGER;
    BEGIN
    SELECT COUNT(*)
    INTO v_value_found
    FROM mutate_test
    WHERE value = in_value;
    IF v_value_found > 0 THEN
    RETURN TRUE;
    ELSE
    RETURN FALSE;
    END IF;
    END;
    CREATE OR REPLACE TRIGGER tr_mutate_test BEFORE INSERT OR UPDATE ON mutate_test
    FOR EACH ROW
    BEGIN
    IF duplicate_found(:new.value) = TRUE THEN
    RAISE_APPLICATION_ERROR(-20000,'Duplicate value found');
    END IF;
    END;
    INSERT INTO mutate_test (id,value) VALUES (1,'CLIFF');
    INSERT INTO mutate_test (id,value) VALUES (2,'SULA');
    COMMIT;
    SELECT * FROM mutate_test;
    -- Should fail as row 1 already has a value of CLIFF
    INSERT INTO mutate_test (id,value) VALUES (3,'CLIFF');
    COMMIT;
    SELECT * FROM mutate_test;
    -- Should fail as row 1 is already set to CLIFF
    UPDATE mutate_test SET value = 'CLIFF' WHERE id = 2;
    COMMIT;
    SELECT * FROM mutate_test;
    UPDATE mutate_test SET value = 'CLIFFORD' WHERE id = 1;
    COMMIT;
    SELECT * FROM mutate_test;
    INSERT INTO mutate_test (id,value) VALUES (3,'RONNY');
    INSERT INTO mutate_test (id,value) VALUES (4,'TIM');
    INSERT INTO mutate_test (id,value) VALUES (5,'MONIQUE');
    COMMIT;
    SELECT * FROM mutate_test;
    -- Wanted result would be row 1 would be updated from CLIFFORD to CLIFF
    -- and the others raise errors, or all of them raise errors.
    UPDATE mutate_test SET value = 'CLIFF' WHERE id IN (1,3,4);
    COMMIT;
    SELECT * FROM mutate_test;

    This is all from a University application that deals with eLearning.
    Shell = Mapping from the system to an external eLearning application, ie: unique id of the Blackboard course shell, or WebBoard board.
    Term = Academic term
    Sector = University sector, ie: Higher Education, TAFE, etc..
    Resource = eLearning tool, ie: Blackboard, WebBoard, etc..
    Resource Level = Whether the resource is being offered at a Course or Program level
    Resource Mapping = Association of a resource to shell
    What we are trying to achieve is that shells cannot be used across sector boundaries.
    The real table structure is (grossly simplified again)
    CREATE TABLE sector (sector_pk INTEGER PRIMARY KEY);
    CREATE TABLE sector_pattern (sector_pk INTEGER REFERENCES sector(sector_pk), pattern CHAR(2) NOT NULL UNIQUE CHECK (pattern = UPPER(pattern)));
    CREATE TABLE term (term_pk INTEGER PRIMARY KEY, term CHAR(4) NOT NULL UNIQUE CHECK (term = UPPER(term)));
    CREATE TABLE resource_level (resource_level_pk INTEGER PRIMARY KEY, term_pk INTEGER REFERENCES term(term_pk));
    CREATE TABLE shell_detail (shell_detail_pk INTEGER PRIMARY KEY);
    CREATE TABLE resource_mapping (resource_mapping INTEGER PRIMARY KEY, resource_level_pk INTEGER REFERENCES resource_level(resource_level_pk), shell_detail_pk INTEGER REFERENCES shell_detail(shell_detail_pk));
    Based on the Ask Tom article linked I'd liked to use a MATERIALIZED VIEW on the following query
    SELECT DISTINCT rm.shell_detail_pk,sp.sector_pk
    FROM resource_mapping rm, resource_level rl, term t, sector_pattern sp
    WHERE rm.resource_level_pk = rl.resource_level_pk
    AND rl.term_pk = t.term_pk
    AND SUBSTR(t.term,3,2) = sp.pattern;
    Then apply a UNIQUE constraint on that VIEW.
    But I'm receiving a
    SQL Error: ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
    I'm not sure how to create the MATERIALIZED VIEW LOG entries for the above VIEW.
    Any ideas anyone? ;)
    Need to do some more reading and research but as Tom says
    "I'm asking around about the future of "SQL" as far as enhancments go like that
    (will update when I get some feedback), but -- you are not limited to triggers
    (in fact, I would avoid triggers as it is virtually IMPOSSIBLE to implement
    cross row/cross object constraints with them!!!! at least correctly)"
    So I think i'll give up on the TRIGGER approach as it doesn't meet our requirements.

  • Updating tables in external database

    Is there a way to update tables in an external database using an HTML-DB process?
    I want to make my "Apply Changes" button process script update an external table in database x.
    Example:
    update x.tracking_locations@x
    set location = :P7_LOCATION,
    description = :P7_DESCRIPTION,
    IN_USE = :P7_IN_USE
    where tracking_location_num = :P7_TRACKING_LOCATION_NUM;
    I get the following error:
    ORA-01461: can bind a LONG value only for insert into a LONG column ORA-02063: preceding line from x
    None of these columns is type long! (they're varchar2)
    Both databases are 9iR2.
    I had a similar problem INSERTING the data (CREATE button) which I got around by posting to a table in my HTML-DB schema, inserting into the database x table as select from the HTML_DB table then deleting from the HTML-DB table all within the "on submit" process script.
    example:
    insert into tracking_locations
    (DESCRIPTION, LOCATION,IN_USE)
    values(:P7_DESCRIPTION,:P7_LOCATION,:P7_IN_USE);
    insert into x.tracking_locations@x
    (DESCRIPTION, LOCATION,IN_USE)
    select description, location, 'Y' from tracking_locations;
    delete from tracking_locations;
    This INSERT trick works, but seems like it should be easier! Nevertheless, I can't get updates to work.
    Any ideas?

    hey tony--
    neat issue. i just reproduced it on our development box and will log it in a minute. for now, though, an easier way to get around it would be to assign the values from your page items to local variables declared in your update procedure and use those local vars for your update. so instead of...
    update x.tracking_locations@x
    set location = :P7_LOCATION,
    description = :P7_DESCRIPTION,
    IN_USE = :P7_IN_USE
    where tracking_location_num = :P7_TRACKING_LOCATION_NUM;
    ...you could set it up like so...
    declare
    l_location varchar2(200) default :P7_LOCATION;
    l_description varchar2(200) default :P7_DESCRIPTION;
    l_in_use default :P7_IN_USE;
    begin
    update x.tracking_locations@x
    set location = l_location,
    description = l_description,
    in_use = l_in_use
    where tracking_location_num = :P7_TRACKING_LOCATION_NUM;
    end;
    ...and things should work fine. i'm also pretty sure that you could avoid having to declare the local variables if you referred to your items in your update statement using the v('ITEM_NAME') syntax, but you'd have to have global_names set to true and it might not be as performant a workaround.
    hope this helps,
    raj

Maybe you are looking for