• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

How to Determine Whether to Insert or Update

 
Ranch Hand
Posts: 1143
1
Eclipse IDE Oracle Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Folks,
First some background, then my question.

I am using Oracle 9i (9.2.0.4) on SUN [sparc] Solaris 9

I have a (parent) table:

create table PARENT (ID number primary key);

And a child table:

create table CHILD (PARENT_ID number, ORDERING number,
primary key (PARENT_ID, ORDERING),
foreign key PARENT_ID references PARENT (ID))

I have a PL/SQL procedure that updates the parent table, and the child table. The procedure receives a string containing a delimited list of database table and column names and values that are used to locate and update a single row in table PARENT as well as any associated rows in table CHILD. If a row doesn't exist in table CHILD, a new row is created and if the row does exist, it is updated.

The string parameter (that is passed to the procedure) is parsed and SQL statements are generated according to which tables, columns and values are found. Native dynamic SQL is used to execute the generated SQL statements.

There is a one-to-many relationship between PARENT and CHILD. In other words, there may be zero, one or several (but never more than three) rows in table CHILD with the same PARENT_ID column value.

I am looking for the most efficient way to determine whether I need to insert into or update table CHILD. Currently (and this is code I inherited -- I didn't write it originally) I have this:
[NOTE: This is a very simplified version of my code, for illustration only.]

Thanks (in advance) for any suggestions,
Avi.
 
author & internet detective
Posts: 41878
909
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Avi,
That is the best way to do it. The only thing I would change is to make the query "select count(*) into L_COUNT". This could execute slightly faster depending on which is column 1. If column 1 is in the index, the execution speed would be the same, but the wildcard still protects you from future schema changes.
 
I have a knack for fixing things like this ... um ... sorry ... here is a consilitory tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic