Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> How best to to this in SQL - Update table
I have two tables ( A & B) and a flat file which I plan to load into a
third table – Table C
SQL> desc TableA; ( rows :1.8 million)
Name Null? Type
ACCTID NOT NULL VARCHAR2(16) ACCTSUBTYPE VARCHAR2(30) ADDR1 VARCHAR2(30) ADDR2 VARCHAR2(30) APPROXAGE NUMBER(5) CITY VARCHAR2(30) DEGREE VARCHAR2(15) FIRSTNM VARCHAR2(20) LASTNM VARCHAR2(20) MENUMBER VARCHAR2(12) MIDDLENM VARCHAR2(20) NAME VARCHAR2(50) PHONENUM VARCHAR2(15) REPSPECCODE VARCHAR2(15) STATELICENSENUM VARCHAR2(20) STATELICENSENUMEXP DATE STPROVCODE VARCHAR2(15) TERRITORYID NOT NULL VARCHAR2(12) TGTIND VARCHAR2(15) TITLE VARCHAR2(15) USRGRPIND VARCHAR2(15) ZIPPC VARCHAR2(10) REFERENCEDEANUM VARCHAR2(9) ALTERNATEID VARCHAR2(12) FAXNUM VARCHAR2(13) columnB VARCHAR2(3) EMAILADD VARCHAR2(30) columnC VARCHAR2(15) READELETE VARCHAR2(15) ROLE VARCHAR2(15) ColumnX VARCHAR2(30) columnY VARCHAR2(30) columnZ VARCHAR2(30) ColumnA VARCHAR2(30) SQL> Desc TableB; (700,000 rows) Name Null? Type ACCTID NOT NULL VARCHAR2(16) ACCTSUBTYPE VARCHAR2(30) ACCTTYPE VARCHAR2(15) AFFACCTID NOT NULL VARCHAR2(16) AFFACCTSUBTYPE VARCHAR2(30) AFFACCTTYPE VARCHAR2(15) CALLLOCTYPECODE CHAR(1) CMMNT VARCHAR2(30) TERRITORYID NOT NULL VARCHAR2(12) SQL> desc tableC; (loaded from the flat file) 1000 rows Name Null? Type ACCTID Not Null VARCHAR2(16) TERRITORYID Not Null VARCHAR2(8) FIRSTNM VARCHAR2(20) MIDDLENM VARCHAR2(20) LASTNM VARCHAR2(20) DEGREE VARCHAR2(15) PREFIX VARCHAR2(10) ADDR1 VARCHAR2(30) ADDR2 VARCHAR2(30) CITY VARCHAR2(30) STPROVCODE VARCHAR2(15) ZIPPC VARCHAR2(10) PHONENUM VARCHAR2(15) ALTERNATEID VARCHAR2(12) MENUMBER VARCHAR2(12) COlumnA VARCHAR2(12) REFERENCEDEANUM VARCHAR2(9) ColumnB VARCHAR2(9) STATELICENSENUM VARCHAR2(20) AFFACCTID Not Null VARCHAR2(16) NEW_ACCTID VARCHAR2(16) columnC VARCHAR2(16)
This is what I want to do:
Over a period of time the data in Table A and table B have become corrupt ( because of the bad design). The flat file ( table C) contains correct data. Plan is to update the following columns in table A and Table B with data from table C. The change in data may be in the form of ADDR, LASTNM fields being changed or in a few (approx 300) cases the ACCTID being updated with the NEW_ACCTID from table C. A condition might exist such that the ACCTID,TERRITORYID combination in table C does not exist in Table A or Table C. What has to be done in such a case is to insert the whole record from Table C into table A or Table B based on the ACCTID. For Example:
Table A:
ACCTID TERRITORYID
---------------- ------------
7329414593ZEN 06432053
7329414593ZEN 01402B3B
Table C:
ACCTID TERRITORYID
---------------- --------
7329414593ZEN 0110805A
So in this case we have to insert into Table A and Table B the full
record ( only the required columns) from Table C.
So the following record will be inserted in Table A 7329414593ZEN,0110805A,ROBERT,ALLEN,5601 W. EUGIE,,GLENDALE,AZ, 85304,1001710041,BA1028174,BA1028174,AZ13801,-1777597859 …. Columns which are in table A but not in TableC. Fields in Table A to be updated from data in Table C
ACCTID,TERRITORYID,FIRSTNM,MIDDLENM,LASTNM,DEGREE, ADDR1,
ADDR2,CITY,STPROVCODE,ZIPPC,PHONENUM,ALTERNATEID,MENUMBER
ColumnA,REFERENCEDEANUM,ColumnB,STATELICENSENUM,
NEW_ACCTID ( this in a few hundred cases when the ACCTID is changed
i.e NEW_ACCTID in table C is not null),
ColumnC
Fields in Table B to be updated from data in Table C
ACCTID,TERRITORYID, AFFACCTID What is the best way to achieve this?
Sample Data from Table C
SQL> select acctid||'|'||territoryid||'|'||firstnm||'|'||
2 lastnm||'|'||alternateid||'|'||REFERENCEDEANUM||'|'||New_acctid
3 from tableC
4 where rownum <51 and new_acctid is not null
SQL> /
ACCTID||'|'||TERRITORYID||'|'||FIRSTNM||'|'||LASTNM||'|'||ALTERNATEID||'|'||REFE
8564157930IL|0451501H|ROBERT|WARREN|767358|BW4474639|8564157930ILCR
251060183OIL|0150350M|KATHY|ROSEN|||251060183OILCR 8464257011IL|0150452M|AYMAN|AL-REJLEH|1749759|BA4508101|8464257011ILCR 7152054910IL|0120850M|SHEZI|KUNDI|1993738||7152054910ILCR 215100189OIL|0130903A|SHAKEEL|AHMAD|2174434082||-2127032886 152060058OIL|0446107O|JOHN|LYNCH|2028776998||-1199046247 152060058OIL|0446107O|JOHN|LYNCH|2028778112||-1420820441 9120455970IL|0180303A|WILLIAM|BROWN|2028890080||-2007497291 856289788OIL|0170104A|ELISABETH|BERGMAN|472928|AB2005723|856289788OILMS 856289788OIL|0170104A|ELISABETH|BERGMAN|472928|AB2005723|856289788OILMS 856289788OIL|0170104A|ELISABETH|BERGMAN|472928|AB2005723|856289788OILMS 2530554568IL|0160854M|VINH|PHAM|1982140||2530554568ILMS 044040169OIL|0160251M|THOMAS|RUSSELL|1873721|BR5213599|044040169OILMS 044040169OIL|0160251M|THOMAS|RUSSELL|1873721|BR5213599|044040169OILMS 635209727OIL|0101051M|DENNIS|AMUNDSON|1273209|AA3046895|635209727OILMS 6461257591IL|0110706A|DAVID|GONZALES|||6461257591ILMS 6461257591IL|0110732C|DAVID|GONZALES|378616|BG0504414|6461257591IL
2865759147|0190602A|PAUL|WALLACE|1571797|BW4768555|2865759147
074076943OIL|0130750M|RICHARD|NOVAK|749457|AN2367630|074076943OIL 074076943OIL|0130750M|RICHARD|NOVAK|749457|AN2367630|074076943OIL 074106959OIL|0130751M|RICHARD|NOVAK|749457|AN2367630|074106959OIL 646019338OIL|0110603A|J KENT|NELSON|15377|AN5518711|646019338OILMS 264503436|0471503I|STEVEN|GUTNIK|61806|AG2710540|264503436MS 264503436|0426503O|STEVEN|GUTNIK|61806|AG2710540|264503436MS229376258|0446607O|EUGENE|OLIVERI|229947|AO3104318|229376258MS
013080454OIL|0100733C|JAY|WINNER|763892|BW1535838|013080454OILMS 253050309OIL|0160855M|HENRY|BODENHEIMER|1707860|BB2775041|253050309OILMS 6562155562IL|0110550M|DAVE|FALING|||6562155562ILMS 842085505BIL|0150452M|DAVID|WOOD|415613|BW2857209|842085505BILMS 2360351973IL|0110551M|JEFF|ALBRECHT|415708|BA0869492|2360351973ILMS
214090029OIL|0110502A|MARKLE|KARLEN|38378|AK3632153|214090029OILMS 6562356381IL|0110503A|GARY|MILLER|39231|AM7856480|6562356381ILMS 6562155250IL|0110550M|COLLEEN|COOPER|178542|AC1200132|6562155250ILMS 214090113OIL|0110503A|LLOYD|BANASZAK|419212|AB2541250|214090113OILMS
027030534OIL|0140703A|DAVID|SULLIVAN|6019821283||244842680 8562957924IL|0170105A|EMANUEL|KRIFCHER|475679|AK5033458|8562957924ILMS 8464259250IL|0150452M|ASHFAQ|AHMAD|2010715||8464259250ILcr 0333253500IL|0150251M|ROKSANA|ALI|1992615||0333253500ILcr 236030403OIL|0110551M|DAVID JOHN|RHUDE|827283|BR0543199|236030403OILMS 223090042OIL|0180352M|MICHAEL|GOLD|1715732|AG6386494|223090042OILMS 945269443OIL|0160951M|LAWRENCE|FRIEDMAN|||945269443OILMS 222110060OIL|0170650M|FRANK|MCGEEHIN|453480|AM1483837|222110060OILMS
50 rows selected.
Running Oracle Version : Oracle7 Server Release 7.3.4.5.0 on HP UX 11.00
Thanks
please email yr answers
Received on Thu Jan 17 2002 - 09:25:23 CST