This is somewhat related to my last question RE conflicting procedure argument names, but in regards to multi-row inserts...

suppose the following procedure:
----
DROP PROCEDURE IF EXISTS sp_ImportedUpdate |
CREATE PROCEDURE sp_ImportedUpdate ()
DETERMINISTIC CONTAINS SQL MODIFIES SQL DATA
BEGIN
  INSERT INTO Destination SELECT ID,
                              CONTACT_NAME,
                              CONTACT_EMAIL,
                              CONTACT_PHONE,
                              ADDRESS_1,
                              ADDRESS_2,
                              CITY,
                              PROVINCE,
                              POSTAL_CODE,
                              COUNTRY,
                              CIRCUIT_ID,
                              TIME_ZONE
  FROM ToBeUpdated
  ON DUPLICATE KEY UPDATE
  ID = VALUES(ID),
  CONTACT_NAME = VALUES(CONTACT_NAME),
  CONTACT_EMAIL = VALUES(CONTACT_EMAIL),
  CONTACT_PHONE = VALUES(CONTACT_PHONE),
  ADDRESS_1 = VALUES(ADDRESS_1),
  ADDRESS_2 = VALUES(ADDRESS_2),
  CITY = VALUES(CITY),
  PROVINCE = VALUES(PROVINCE),
  POSTAL_CODE = VALUES(POSTAL_CODE),
  COUNTRY = VALUES(COUNTRY),
  CIRCUIT_ID = VALUES(CIRCUIT_ID),
  TIME_ZONE = VALUES(TIME_ZONE);
END |
-----

Here, 'ToBeUpdated' is a view which highlights changes between to tables with the same primary keys, but possibly different values in other columns. The naming scheme here can be tricky, and on first glance given previous problems, it would look to fail, because the column name in VALUES() is the same as the one on the left. However, this actually works as intended, where the "changed" values are the ones being returned by VALUE. Can someone explain why this is? I'd like to have a solid understanding of the scoping of procedure variables which happen to be the same as column names.

thank you!
-lev

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to