11.521: Spatial Database Management and Advanced Geographic Information Systems |
11.523: Fundamentals of Spatial Database Management |
First, let's create private copies of the PARCELS, OWNERS, and FIRES tables:
DROP TABLE myparcels; CREATE TABLE myparcels AS SELECT * FROM parcels; DROP TABLE myowners; CREATE TABLE myowners AS SELECT * FROM owners; DROP TABLE myfires; CREATE TABLE myfires AS SELECT * FROM fires;
A simple update: Change the address of "VANDELAY INDUSTRIES" to "300 ATLANTIC":
-- See the old value SELECT * FROM myowners WHERE oname = 'VANDELAY INDUSTRIES'; -- Perform the update UPDATE myowners SET address = '300 ATLANTIC' WHERE ONAME = 'VANDELAY INDUSTRIES'; -- Check our work SELECT * FROM myowners WHERE oname = 'VANDELAY INDUSTRIES'; -- Commit the change permanently COMMIT;
A more complicated update:
-- Look at estimated losses by ZIP code SELECT f.parcelid, f.fdate, p.zip, f.estloss FROM myfires f, myparcels p WHERE f.parcelid = p.parcelid ORDER BY p.zip, f.parcelid; -- Increase the losses for parcels in ZIP 02130 by 50% UPDATE myfires f SET estloss = estloss * 1.50 WHERE EXISTS (SELECT NULL FROM myparcels p WHERE p.parcelid = f.parcelid AND p.zip = '02130'); -- Check the result SELECT f.parcelid, f.fdate, p.zip, f.estloss FROM myfires f, myparcels p WHERE f.parcelid = p.parcelid ORDER BY p.zip, f.parcelid; -- Rollback ROLLBACK; -- Check again SELECT f.parcelid, f.fdate, p.zip, f.estloss FROM myfires f, myparcels p WHERE f.parcelid = p.parcelid ORDER BY p.zip, f.parcelid;
The most advanced form uses a subquery in the SET clause too.
-- Set the losses for parcels in ZIP 02130 to the ZIP code UPDATE myfires f SET estloss = (SELECT TO_NUMBER(p.zip) FROM myparcels p WHERE p.parcelid = f.parcelid) WHERE EXISTS (SELECT NULL FROM myparcels p WHERE p.parcelid = f.parcelid AND p.zip = '02130'); -- Check the result SELECT f.parcelid, f.fdate, p.zip, f.estloss FROM myfires f, myparcels p WHERE f.parcelid = p.parcelid ORDER BY p.zip, f.parcelid; -- Commit the change COMMIT;
Note that it is important to have a WHERE clause in correlated updates to avoid Oracle errors.
For more information about this page, please
contact the 11.521 Staff Mailing List <11.521staff@MIT.EDU>.
Created 28 February
2002 (thg)
Last Modified 28 February 2002 (thg)