FOR XML causing high cardinality in update statement.

Wasn't really sure how to word this, but here it goes. I have a simple update statement that uses a sub-query to concatenate a column from a record set using the most recently recommended fashion of FOR XML. The row estimations through the XML reader show
as 42 million rows, but the actual rows are 18k'ish.
update d
set d.DraftDocumentReadyDate = stuff(isnull((select ', ' + convert(varchar, wa.WorkAudit_Date, 110)
from livelink.WAuditTrail wa inner join livelink.KUAF ku1
on wa.WorkAudit_PerformerID_Name = ku1.Name
where d.VolumeID = wa.WorkAudit_WorkID
and wa.WorkAudit_Task_Title = 'Draft Document'
and wa.WorkAudit_Status = 21
for xml path (''), type).value('.','nvarchar(4000)'), ''), 1, 2, '')
from #ltbl_DataDump d
Adding image of cardinality:
John M. Couch

I would change this query a bit (since I like to simplify):
;with cte as (Select workAudit_workID, stuff(isnull((select ', ' + case when ku1.FirstName IS NULL and ku1.LastName IS NULL and ku1.Name IS NULL then 'None'
when ku1.FirstName IS NULL and ku1.LastName IS NULL then ku1.Name
else ku1.FirstName + ' ' + ku1.LastName
end
from livelink.WAuditTrail wa inner join livelink.KUAF ku1
on wa.WorkAudit_PerformerID_Name = ku1.Name
where wa.WorkAudit_WorkID = wa1.workAudit_workID
and wa.WorkAudit_Task_Title = 'Draft Document'
and wa.WorkAudit_Status = 24
for xml path (''), type).value('.','nvarchar(4000)'), ''), 1, 2, '') as DocName,
STUFF((SELECT ', ' + convert(varchar(20), wa.WorkAudit_Date, 110)
from livelink.WAuditTrail wa
where wa.WorkAudit_WorkID = wa1.workAudit_workID
and wa.WorkAudit_Task_Title = 'Draft Document'
and wa.WorkAudit_Status = 24
for xml path ('')),1,2,'') as Dates
FROM livelink.WAuditTrail wa1
where wa1.WorkAudit_Task_Title = 'Draft Document'
and wa1.WorkAudit_Status = 24
GROUP BY wa1.workAudit_WorkId)
MERGE #ltbl_DataDump d
USING cte ON d.WolumeID = cte.workAudit_Workid
WHEN MATCHED
THEN UPDATE
SET
DraftDocumentStartedPerformer = cte.DocName,
d.DraftDocumentStartedDate = cte.Dates
For every expert, there is an equal and opposite expert. - Becker's Law
My blog
My TechNet articles

Similar Messages

  • Update statements tuning

    Hello,
    I am working on Oracle 10.2.0.4 and O/S is solaris .
    We are having one job which exceutes lots of update statements one by one on database. The whole job is taking more then 2 hours.
    I check that we can not do mach changes in sql tuning side to tune this query , is there any way to reduce time in oracle side like some parameter setting ..
    resizing buffer , redo log files or ..?
    any idea...

    thanks helios,
    I will check this link ..
    this states to make changes in sql statements
    but as this is a product and changing sql statements will take lots of approvals and money and efforts to customize product but yes we can try with that.
    I am looking for some database side options .so that we can tune it maximum and minimize time taken in job.
    Is there any options we have .. as redo log size , checkpoint interval etc.. to do it .
    what are the optimized values for these in high frequency of update statements environment.

  • Replication update statement takes long time

    Hi Replication experts,
    I have a issue and please suggest if my understanding and solution is correct.
    We have a transactional replication setup for data warehouse, from today morning replication got huge latency so when I looked into it I saw the "sp_MSupd_< tablename >" was running for very long time and by this time it was running for 9 hours
    still no data was updated, Latency went very high. What we feel is that the index maintenance was not done in subscriber also it was not replicated too. So due to high fragmentation the update statement could take very long.
    As there was no error message or blocks found all we see is the update taking very long. So to avoid this we are planning to remove the index, as this is just data warehouse index maintenance is not required by removing we can gain some space too. Is this a
    good Idea to implement?
    When we ran profiler nothing was found, no error or alert logged.
    Please let me know your suggestions
    Thanks
    Best Regards Moug

    Hi All,
    The Issue we found to be is that a day before, new column was added to the table and 9000 rows were updated ... This caused the distributor to slow down the update operation as the index in subscriber(15 million rows) was updating every time  a row
    is updated.. So we suspect that adding a new column and updating it at the same time is the culprit..
    But still am not convinced as per my understanding the distributor operates by comparing the primary key of publisher that was changed with the primary key of the subscriber and apply those change.. If that is the case why should it worry about the new column
    added or the number of updates..
    Also one strange thing is another table was also lagging behind in its operation ,though that table was updated with just 18 rows.. So in a nutshell the update operation was totally down by distributor operation on that day..
    Can someone please shed some light on this, Replication is my favorite topic but now I got fear of it.. after failing to know what could be issue... 
    Best Regards Moug

  • Explain plan on Update statement in function

    All,
    I have an update statement in a function and my explain plan shows:
    "Optimizer"     "Cost"     "Cardinality"     "Bytes"     
    "UPDATE STATEMENT"     "ALL_ROWS"     "2"     "1"     "7"     
    "UPDATE user.<table_name>"     ""     ""     ""     ""     
    "INDEX(UNIQUE SCAN) <table_name>.<PK_column_cons>"     "ANALYZED"     "1"     "1"     "7"
    Filtering is on index unique column, but cost is 1 what does that mean?
    do i need to change my update statement in function?
    Any ideas?
    Regards,
    ~ORA

    The cost is the optimizer's measure of how much effort it will take to execute the statement. For any statement the optimizer will evaluate a number of execution plans and choose the one with the lowest cost. I wouldn't worry too much about what it actually "means". However if you want to understand this subject in a lot more detail I would recommend the book Cost-Based Oracle Fundamentals by Jonathan Lewis.
    For your update statement the optimizer has chosen to access a single row by the primary key index, which is probably good enough, so you should not need to change it.
    The only faster way to access the data would be to use the row's ROWID directly. You would need to have fetched this explicitly in a previous SELECT statement, or you could use it implicitly with the WHERE CURRENT OF syntax for a cursor opened with FOR UPDATE.

  • Auto update stats disabled for a user Database in Sql server

    While trying to improve the performance of few queries, we found via execution plan that there were lot of Index/Clustered index seeks. Therefore:
    First thing we did, was to check our Re-indexing and update stats job which runs weekly for this user DB ( Around 400 GB in size and is used 24*5). The job was running fine.
    Later when we ran SP_Blitz, we came to know that auto-update-stats is disabled for this user DB. We expected this to be a possible cause and change it from false to TRUE(Auto update stats)
    Also, per SP_blitz there are user-created statistics for this DB. When ran the query to check how many, we saw around 7K user stats out there.
    So my question would be 1) setting the Auto update stats to TRUE would require a reboot or once changed i need to track the performance and 2) Should we consider dropping those user created stats or manually look into them one by one.
    How should we proceed on this, please suggest, thanks!

    There may be good reasons for having auto-stats off, but those cases are not very common. It makes a little more sense to turn if off on table level. An example of the latter is a relatively small table, say < 100000 rows where not many new rows are added,
    but the existing rows are being updated frequently. This will trigger autostats, but probably without much benefit.
    But if you have a system which is very busy during peak times, you may not want autostats take resources during those hours. But if you turn off autostats, you will need to make sure that stats are updated in some other fashion.
    Here is a query that you can use review when your statistics last were updated:
    SELECT o.name, s.name, stats_date(o.object_id, s.stats_id) AS lastupdated
    FROM   sys.objects o
    JOIN   sys.stats s ON s.object_id = o.object_id
    --WHERE  s.user_created = 1
    ORDER BY lastupdated
    7000 user-created statistics sounds a little excessive, but I guess they were added to compensate for the autostats that SQL Server were not permitted to create. I would not recommend dropping these statistics, as SQL Server would spend cycles on recreating
    them.
    You should not have to restart SQL Server for the Auto-update stats setting to take effect; it takes effect immediately.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • My MBpro has been running some kind of app in the background upon turning on, heating up for no cause. Is this normal since Snow Lepard? It's been updated and I also have anti-virus software too.

    My MBpro has been running some kind of app in the background upon turning on, heating up for no cause. Is this normal since Snow Lepard? It's been updated and I also have anti-virus software too.

    you're welcome....
    also check activity monitor - all processes - see what's using up most of your cpu resources under % CPU....
    highlight anything that's really high and hit quit process......anything over 10% is considered high - unless it's your browser....
    good luck...

  • SqlDependency causing delays to UPDATE statements

    I have a win forms application which uses SqlDependency to monitor an orders table for changes (ie when goods are shipped etc).  The SQL statement works fine but I am having trouble with other SQL statements wanting to update the orders table whilst
    the SqlDependency is monitoring the table.
    Initially I thought it was down to the transaction containing the update statements but if I take just one simple update statement and run it in SQL Management Studio, I get the same delay between 10 and 20 seconds.  It appears to be the case for just
    this one table which is monitored, other tables which are included in the SqlDependency SQL statement through inner joins are updated fine (<1 second).
    Anyone any ideas on what could cause this or where to start troubleshooting?
    Also, this is in a production system and the table in question has circa 19k rows.  I don't see this problem in my dev system which has fewer rows.
    Chris

    Hello,
    I am trying to involve someone more familiar with this topic for a further look at this issue. Sometime delay might be expected from the job transferring. Your patience is greatly appreciated.
    Thank you for your understanding and support.
    Regards,
    Fanny Liu
    If you have any feedback on our support, please click here.
    Fanny Liu
    TechNet Community Support

  • Need help to write a query for Update statement with  join

    Hi there,
    The following update statement gives me error as the given table in set statement is invalid. But its the right table .
    Is the statement correct? Please help .
    update (
           select distinct(vpproadside.VEHICLE_CRED_OVERRIDE.vin)            
             from vpproadside.VEHICLE_CRED_OVERRIDE
             join vpproadside.vpp_vehicle
               on vpproadside.vpp_vehicle.vin = vpproadside.VEHICLE_CRED_OVERRIDE.vin
            where VPP_CARRIER_SEQ_NUMBER = 90
              and EXPIRY_DATE = '17-MAR-10'
       set vpproadside.VEHICLE_CRED_OVERRIDE.EXPIRY_DATE = '15-SEP-10';Edited by: Indhu Ram on Mar 12, 2010 1:00 PM
    Edited by: Indhu Ram on Mar 12, 2010 1:22 PM
    Edited by: Indhu Ram on Mar 12, 2010 2:35 PM
    Edited by: Indhu Ram on Mar 15, 2010 8:04 AM
    Edited by: Indhu Ram on Mar 15, 2010 8:06 AM
    Edited by: Indhu Ram on Mar 15, 2010 8:28 AM

    Ask Tom has very good discussion about this, if UPDATE does not work for PK issue, you can use MERGE
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:760068400346785797

  • Installing "Java for Mac OS X 10.5 Update 6" (1.0) causing problems

    Hi,
    I installed the "Java for Mac OS X 10.5 Update 6" (1.0)" yesterday evening and it caused problems:
    - network
    - date/time screwed up
    - Time Machine crashed
    My environment is a MacBook Pro, running 10.5.8, all latest patches applied. During the install all other applications were closed (my once in three months cleanup of the desktop , Time Machine was not running although it might have kicked in during the download, I left it alone for install and the necessary reboot. I didn't hook it up to the power, had 82% battery left, afterwards (after all repairs) still 76%, so my guess is that is not the root cause, although I did get the power source warning and waved it away during the installs.
    Looking back into the logfiles and using some gut-feeling I do think somehow the date/time seeting was screwed up and caused all other problems. The date was reset to the famous Unix starttime, Jan 1, 1970. At first I didn't notice, only after my network (Airport Extreme based) asked me WPA password and then complained about the date/time I noticed something weird.
    After resetting date/time, verifying the disk for problems (none found), re-entering the WPA password, network ran again, had to re-connect with the Time Capsule and check the sparse backup-volume there before I got everything up-and-running again.
    Not a very big deal, but annoying, and certainly something wrong in the update here.
    Anyone any explains ?
    Regards,
    Wim.

    Sorry if I missed it...have you scoured logs for anything that might shed light on success/fail during the install?

  • Dynamic UPDATE statement with parameters for column names.

    Hello,
    On this* website I read "The SQL string can contain placeholders for bind arguments, but bind values cannot be used to pass in the names of schema objects (table or column names). You may pass in numeric, date, and string expressions, but not a BOOLEAN or NULL literal value"
    On the other hand, in this Re: execute immediate with dynamic column name update and many other
    posts people use EXECUTE IMMEDIATE to create a dynamic UPDATE statement.
    dynSQL:='UPDATE CO_STAT2 CO SET CO.'||P_ENT_B_G_NAME||' = '||P_ENT_E_G_WE||'
    WHERE ST IN
    (SELECT ST FROM STG_CO_STAT2_TEST CO WHERE
    '||P_ST||' = CO.ST AND
    CO.'||P_ENT_E_G_NAME||' > '||P_ENT_E_G_WE||' AND
    CO.'||P_ENT_B_G_NAME||' < '||P_ENT_E_G_WE||');';
    EXECUTE IMMEDIATE dynSQL ;
    Since this statement is part of a Stored Procedure, I wont see the exact error but just get a ORA-06512.
    The compiling works fine and I use Oracle 11g.
    http://psoug.org/definition/EXECUTE_IMMEDIATE.htm

    OK I extracted from all of your posts so far that I have to use "bind-variables with :"
    From all the other tuorials and forums posts, I assume using the pipe is correct so I added those as well into the script:
    set serveroutput on format wraped;
    DECLARE
    dynSQL VARCHAR2(5000);
    P_ENT_E_G_NAME VARCHAR2 (100) :='test1'; P_ENT_E_G_WE VARCHAR2 (100) :='01.02.2012'; P_ENT_B_G_NAME VARCHAR2 (100) :='01.01.2012';
    P_ST                VARCHAR2 (100) :='32132';
    BEGIN
    dynSQL:= 'UPDATE CO_STAT2 CO SET CO.'||:P_ENT_B_G_NAME||' = '||:P_ENT_E_G_WE||'
                  WHERE ST IN (SELECT ST FROM STG_CO_STAT2_TEST CO WHERE
                  '||:P_ST||'                           = CO.ST                  AND
                  CO.'||:P_ENT_E_G_NAME||'     > '||:P_ENT_E_G_WE||' AND
                  CO.'||:P_ENT_B_G_NAME||'    
    < '||:P_ENT_E_G_WE||')';
    --this is somehow missing after the last < '||:P_ENT_E_G_WE||')';
    dbms_output.enable;
    dbms_output.put(dynSQL);
    --EXECUTE IMMEDIATE dynSQL;    
    END;Problem:I think I figured it out, the dates that I parse into the query need additional '

  • Update statement for object table.

    Hi,
    I have created one type as
    Create type test as object(
    ins_by varchar2(30),
    ins_on date,
    upd_by varchar2( 30),
    upd_on date);
    and then created an object table as
    create table imst(
    i_code number(5),
    i_desc varchar2(35),
    i_op test);
    now i am able to insert record in this table as
    insert into imst values(1,'Hawkins cooker',test(user,sysdate,'',''));
    Above works fine.
    But I would also like to update the record with i_op.upd_by,i_op.upd_on with some other values.
    Can any body help me specifying how to write a plain update statement for the same.
    Regards.
    Soumen

    Check it out:
    SQL> Create type myTest as object(
      2  ins_by varchar2(30),
      3  ins_on date,
      4  upd_by varchar2( 30),
      5  upd_on date);
      6  /
    Type created.
    SQL> create table imst(
      2  i_code number(5),
      3  i_desc varchar2(35),
      4  i_op myTest);
    Table created.
    SQL> insert into imst values(1,'Hawkins cooker', mytest(user,sysdate,'',''));
    1 row created.
    SQL> select * from imst;
        I_CODE I_DESC
    I_OP(INS_BY, INS_ON, UPD_BY, UPD_ON)
             1 Hawkins cooker
    MYTEST('APC_LOAD', '12-JUL-04', NULL, NULL)
    SQL> update imst i set i.i_op.upd_by = USER, i.i_op.upd_on = add_months(sysdate, 1);
    1 row updated.
    SQL> select * from imst;
        I_CODE I_DESC
    I_OP(INS_BY, INS_ON, UPD_BY, UPD_ON)
             1 Hawkins cooker
    MYTEST('APC_LOAD', '12-JUL-04', 'APC_LOAD', '12-AUG-04')
    SQL> Smoke me a kipper I'll be back before breakfast.
    Cheers, APC

  • 'Missing select' error for update statement using WITH clause

    Hi,
    I am getting the below error for update statement using WITH clause
    SQL Error: ORA-00928: missing SELECT keyword
      UPDATE A
      set A.col1 = 'val1'
         where
      A.col2 IN (
      WITH D AS
      SELECT col2 FROM
      (SELECT col2, MIN(datecol) col3 FROM DS
      WHERE <conditions>
        GROUP BY PATIENT) D2
      WHERE
      <conditions on A.col4 and D2.col3>

    Hi,
    The format of a query using WITH is:
    WITH  d  AS
        SELECT  ...  -- sub_query
    SELECT  ...   -- main query
    You don't have a main query.  The keyword FROM has to come immediately after the right ')' that ends the last WITH clause sub-query.
    That explains the problem based on what you posted.  I can't tell if the real problem is in the conditions that you didn't post.
    I hope this answers your question.
    If not, post a complete test script that people can run to re-create the problem and test their ideas.  Include a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all the tables involved, and the results you want from that data.
    In the case of a DML operation (such as UPDATE) the sample data should show what the tables are like before the DML, and the results will be the contents of the changed table(s) after the DML.
    Explain, using specific examples, how you get those results from that data.
    Always say what version of Oracle you're using (e.g. 11.2.0.2.0).
    See the forum FAQ: https://forums.oracle.com/message/9362002

  • UPDATE Statement executing for whole table even when WHERE Clause is presen

    Hi Friends,
    I have a problem in a stored procedure where i have written an update statement with a where clause. At a time only one row should get updated depending upon unique identifier in where clause.
    But whats happening is that Update statement is getting executed for all the rows in the table neglecting the WHERE clause. I am not getting the clue as to why this is happening. Here is the stored Procedure And the update statement is in BOLD :-
    CREATE OR REPLACE PROCEDURE MDMADM.proc_MDM_InsertCntryDetails
    CntryMasterCode IN VARCHAR2,
    CntryName IN VARCHAR2,
    MDMUser IN VARCHAR2,
    Exist IN INTEGER,
    status IN VARCHAR2,
    Inserted_By IN VARCHAR2 DEFAULT NULL,
    Modified_By IN VARCHAR2 DEFAULT NULL,
    Mdm_Code IN NUMBER DEFAULT 0,
    Action IN VARCHAR2 DEFAULT 'add',
    XGenAttNames IN VARCHAR2 DEFAULT NULL,
    XGenAttValues IN VARCHAR2 DEFAULT NULL,
    MirusAttNames IN VARCHAR2 DEFAULT NULL,
    MirusAttValues IN VARCHAR2 DEFAULT NULL,
    GenisysAttNames IN VARCHAR2 DEFAULT NULL,
    GenisysAttValues IN VARCHAR2 DEFAULT NULL,
    XGenModify IN VARCHAR2 DEFAULT NULL,
    MirusModify IN VARCHAR2 DEFAULT NULL,
    GenisysModify IN VARCHAR2 DEFAULT NULL
    IS
    strSQLXGen VARCHAR(1000);
    strSQLMirus VARCHAR(1000);
    strSQLGenisys VARCHAR(1000);
    nMaxMDMCode INTEGER;
    ifExist INTEGER;
    NAME: proc_MDM_InsertCntryDetails
    PURPOSE:
    REVISIONS:
    Ver Date Author Description
    1.0 7/3/2009 1. Created this procedure.
    NOTES:
    Automatically available Auto Replace Keywords:
    Object Name: proc_MDM_InsertCntryDetails
    Sysdate: 7/3/2009
    Date and Time: 7/3/2009, 7:11:20 PM, and 7/3/2009 7:11:20 PM
    Username: (set in TOAD Options, Procedure Editor)
    Table Name: (set in the "New PL/SQL Object" dialog)
    BEGIN
    SELECT COUNT(*) INTO ifExist FROM MDM_COUNTRY_MASTER;
    IF ifExist = 0 THEN
    SELECT 1 INTO nMaxMDMCode FROM DUAL;
    ELSE
    SELECT MAX(MDM_CODE)+1 INTO nMaxMDMCode FROM MDM_COUNTRY_MASTER;
    END IF;
    IF Action='add' THEN
    INSERT INTO MDM_COUNTRY_MASTER(MDM_CODE,MDM_MASTER_CODE,MDM_DESCRIPTION,MDM_USER,MDM_EXIST,MDM_STATUS,MDM_ACTION,DAT_INSERT_DATE,DAT_INSERTED_BY)
         VALUES(nMaxMDMCode,CntryMasterCode,CntryName,MDMUser,Exist,status,Action,SYSDATE,Inserted_By);
    strSQLXGen := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || XGenAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || nMaxMDMCode || ',' || '''' || 'XGen' || '''' || ',1,' || XGenAttValues || ',' || '''' || Inserted_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLXGen;
    strSQLMirus := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || MirusAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || nMaxMDMCode || ',' || '''' || 'Mirus' || '''' || ',2,' || MirusAttValues || ',' || '''' || Inserted_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLMirus;
    strSQLGenisys := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || GenisysAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || nMaxMDMCode || ',' || '''' || 'Genisys' || '''' || ',3,' || GenisysAttValues || ',' || '''' || Inserted_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLGenisys;
    ELSE
    UPDATE MDM_COUNTRY_MASTER
    SET MDM_DESCRIPTION=CntryName,DAT_MODIFIED_BY=Modified_By,DAT_MODIFY_DATE=SYSDATE,
    MDM_USER=MDMUser,MDM_ACTION=Action,MDM_STATUS=status,MDM_EXIST=Exist WHERE MDM_CODE=Mdm_Code;
    SELECT COUNT(*) INTO ifExist FROM MDM_COUNTRY_MAPPING WHERE SYSTEM_CODE=1 AND MDM_CODE=Mdm_Code ;
    IF ifExist = 0 THEN
    strSQLXGen := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || XGenAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || Mdm_Code || ',' || '''' || 'XGen' || '''' || ',1,' || XGenAttValues || ',' || '''' || Modified_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLXGen ;
    ELSE
    strSQLXGen := 'UPDATE MDM_COUNTRY_MAPPING SET ' || XGenModify || ',DAT_MODIFY_DATE=SYSDATE,DAT_MODIFIED_BY=' || '''' || Modified_By || '''' || ' WHERE MDM_CODE=' || Mdm_Code || ' and SYSTEM_CODE=1' ;
    EXECUTE IMMEDIATE strSQLXGen ;
    END IF;
    SELECT COUNT(*) INTO ifExist FROM MDM_COUNTRY_MAPPING WHERE SYSTEM_CODE=2 AND MDM_CODE=Mdm_Code ;
    IF ifExist = 0 THEN
    strSQLMirus := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || MirusAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || Mdm_Code || ',' || '''' || 'Mirus' || '''' || ',2,' || MirusAttValues || ',' || '''' || Modified_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLMirus ;
    ELSE
    strSQLMirus := 'UPDATE MDM_COUNTRY_MAPPING SET ' || MirusModify || ',DAT_MODIFY_DATE=SYSDATE,DAT_MODIFIED_BY=' || '''' || Modified_By || '''' || ' WHERE MDM_CODE=' || Mdm_Code || ' and SYSTEM_CODE=2' ;
    EXECUTE IMMEDIATE strSQLMirus ;
    END IF;
    SELECT COUNT(*) INTO ifExist FROM MDM_COUNTRY_MAPPING WHERE SYSTEM_CODE=3 AND MDM_CODE=Mdm_Code;
    IF ifExist = 0 THEN
    strSQLGenisys := 'INSERT INTO MDM_COUNTRY_MAPPING(MDM_CODE,SYSTEM_NAME,SYSTEM_CODE,' || GenisysAttNames || ',DAT_INSERTED_BY,DAT_INSERT_DATE) ' ||
    'VALUES(' || Mdm_Code || ',' || '''' || 'Genisys' || '''' || ',3,' || GenisysAttValues || ',' || '''' || Modified_By || '''' || ',SYSDATE)';
    EXECUTE IMMEDIATE strSQLGenisys ;
    ELSE
    strSQLGenisys := 'UPDATE MDM_COUNTRY_MAPPING SET ' || GenisysModify || ',DAT_MODIFY_DATE=SYSDATE,DAT_MODIFIED_BY=' || '''' || Modified_By || '''' || ' WHERE MDM_CODE=' || Mdm_Code || ' and SYSTEM_CODE=3' ;
    EXECUTE IMMEDIATE strSQLGenisys ;
    END IF;
    END IF;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    NULL;
    WHEN OTHERS THEN
    -- Consider logging the error and then re-raise
    RAISE;
    END proc_MDM_InsertCntryDetails;
    Thanks

    It might be helpful to search this forum and google for PL/SQL (variables, stored procs, etc) naming standards. There are quite a few out there and you can choose one that works for you.
    As an example, a lot of standards adopt naming prefixes, ie v_ for VARCHAR variable, n_ for NUMBER variable, pv_ for paramater VARCHAR, etc.

  • Update statement for multiple records

    i have table a and table b
    common col in both the tables is emp_id
    in table b i have district_id
    which i want to update in table a.... column district_id for all the employees
    how to write update statement for this
    Edited by: user10873676 on Oct 17, 2011 8:00 AM

    Based on your current description, we have something like this...
    SQL> create table a (emp_id number)
      2  /
    Table created.
    SQL>
    SQL> create table b (emp_id number, district_id number)
      2  /
    Table created.
    SQL>
    SQL> insert into a (emp_id)
      2  select rownum from dual connect by rownum <= 10
      3  /
    10 rows created.
    SQL>
    SQL> insert into b (emp_id, district_id)
      2  select rownum, 10-rownum from dual connect by rownum <= 10
      3  /
    10 rows created.
    SQL>
    SQL> update b
      2  set district_id = 1
      3  /
    10 rows updated.
    SQL>
    SQL> select * from a;
        EMP_ID
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
    10 rows selected.
    SQL> select * from b;
        EMP_ID DISTRICT_ID
             1           1
             2           1
             3           1
             4           1
             5           1
             6           1
             7           1
             8           1
             9           1
            10           1
    10 rows selected.Which I'm sure is NOT what you want as the update on table b has nothing to do with table a, and we have no idea what the district_id should be updated with.

  • 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

Maybe you are looking for

  • Cfqueryparam problem

    While cleaning up some sql injection problems, I found I had to rewrite how the inserts were working. I do not know in advance what fields need to be populated for inserts so I mad a generic function to make my inserts. <cffunction name="insertIntoTa

  • Goldengate replication of CLOBs in Linux

    Hi All, I'm facing a weird problem using GoldenGate to replicate CLOBs in a Linux environment. I have configured GG for a simple one-way replication of no more than 10 tables from Oracle to Oracle databases. Most of these tables have CLOB columns and

  • Hide row in planning book

    Hi experts, I have the following requirement in DP planning book. the planning book has 3 KF (KF1, KF2 & KF3) and 2 characteristics (CHAR1 & CHAR2).  Now for KF1 I need to display drill down for all the values in CHAR1 and then to all the values in C

  • Encoded double byte characters string conversion

    I have double byte encoded strings stored in a properties file. A sample of such string below (I think it is japanese): \u30fc\u30af\u306e\u30a2 I am supposed to read it from file, convert it to actual string and use them on UI. I am not able to figu

  • How can I store movies in the cloud and access them from my devices?

    Hello, I would like to store movies in the cloud and access them from my device without having to download them to the device because there is not enough space on the harddrive to store them on it. How would I do this? Would I have to download the mo