midrange.com code scratchpad
Name:
overriding generated columns
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
02/07/2018 06:30:17 pm
IP:
Logged
Description:
The user was to lazy to give a description
Code:
  1. drop table qtemp.testtable;
  2. create table qtemp.testtable (
  3.                 "ID" INTEGER GENERATED ALWAYS AS IDENTITY (
  4.                 START WITH 1 INCREMENT BY 1
  5.                 NO MINVALUE NO MAXVALUE
  6.                 NO CYCLE NO ORDER
  7.                 CACHE 20 ),
  8.                 mytext char(20));
  9.  
  10. INSERT INTO QTEMP.TESTTABLE (MYTEXT) VALUES('A');              
  11.  
  12. SELECT * FROM QTEMP.TESTTABLE;  -- "ID"=1
  13.  
  14. UPDATE QTEMP.TESTTABLE OVERRIDING USER VALUE
  15. SET ID =0, MYTEXT='B'
  16. WHERE ID=1;
  17. SELECT * FROM QTEMP.TESTTABLE;  -- "ID=2
  18. -- OVERRIDING USER VALUE says to ignore the ID=0 and instead generate a new identity value for that column.
  19.  
  20. UPDATE QTEMP.TESTTABLE OVERRIDING USER VALUE
  21. SET MYTEXT='C'
  22. WHERE ID=2;
  23. -- Fails.  You cannot specify OVERRIDING and not update any columns with defaults.
  24.  
  25. UPDATE QTEMP.TESTTABLE
  26. SET MYTEXT='C'
  27. WHERE ID=2;
  28. SELECT * FROM QTEMP.TESTTABLE; -- ID still =2
  29. -- Since you didn't include ID on your SET clause it didn't update it.
  30.  
  31. UPDATE QTEMP.TESTTABLE OVERRIDING SYSTEM VALUE
  32. SET ID =0, MYTEXT='D'
  33. WHERE ID=2;
  34. SELECT * FROM QTEMP.TESTTABLE;  -- "ID=0
  35. --  OVERRIDING SYSTEM VALUE directly says do what I say and put 0 in there and do not let the system adjust it.
  36.  
  37. -- OVERRIDING USER VALUE is the default
  38.  
© 2004-2019 by midrange.com generated in 0.005s valid xhtml & css