You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2016/04/11 01:24:28 UTC

svn commit: r1738488 - /db/derby/docs/trunk/src/ref/rrefsqlj81859.dita

Author: rhillegas
Date: Sun Apr 10 23:24:28 2016
New Revision: 1738488

URL: http://svn.apache.org/viewvc?rev=1738488&view=rev
Log:
DERBY-6883: Document the SET GENERATED clause of the ALTER TABLE statement.

Modified:
    db/derby/docs/trunk/src/ref/rrefsqlj81859.dita

Modified: db/derby/docs/trunk/src/ref/rrefsqlj81859.dita
URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqlj81859.dita?rev=1738488&r1=1738487&r2=1738488&view=diff
==============================================================================
--- db/derby/docs/trunk/src/ref/rrefsqlj81859.dita (original)
+++ db/derby/docs/trunk/src/ref/rrefsqlj81859.dita Sun Apr 10 23:24:28 2016
@@ -41,6 +41,7 @@ tables</indexterm><indexterm>Tables<inde
 column</li>
 <li>Override row-level locking for the table (or drop the override)</li>
 <li>Change the increment value and start value of the identity column</li>
+<li>Change an identity column from ALWAYS to DEFAULT BY behavior or vice-versa</li>
 <li>Change the nullability constraint for a column</li>
 <li>Change the default value for a column</li>
 </ul></p></section>
@@ -69,6 +70,7 @@ href="rrefconstraintname.dita#rrefconstr
 <i>columnName</i> SET DATA TYPE VARCHAR( <i>integer</i> ) FOR BIT DATA |
 <i>columnName</i> SET INCREMENT BY <i>integerConstant</i> |
 <i>columnName</i> RESTART WITH <i>integerConstant</i> |
+<i>columnName</i> SET GENERATED { ALWAYS | BY DEFAULT } |
 <i>columnName</i> { SET | DROP } NOT NULL |
 <i>columnName</i> [ NOT ] NULL |
 <i>columnName</i> [ WITH | SET ] DEFAULT <i>defaultValue</i> |
@@ -97,7 +99,14 @@ used values 1 through 5 at this point. I
 a value, the system will generate a 3, which will result in a unique key exception
 because the value 3 has already been manually inserted. To compensate for
 the manual inserts, issue an ALTER TABLE statement for the identity column
-with RESTART WITH 6:<codeblock><b>ALTER TABLE tauto ALTER COLUMN i RESTART WITH 6</b></codeblock></p><p>ALTER
+with RESTART WITH 6:<codeblock><b>ALTER TABLE tauto ALTER COLUMN i RESTART WITH 6</b></codeblock></p>
+
+<p>
+SET GENERATED ALWAYS causes Derby to not accept an overriding value for an identity column when a row is inserted or updated.
+SET GENERATED BY DEFAULT causes Derby to permit these overrides.
+</p>
+
+<p>ALTER
 TABLE does not affect any view that references the table being altered. This
 includes views that have an "*" in their SELECT list. You must drop and re-create
 those views if you wish them to return the new columns.</p>
@@ -191,6 +200,7 @@ the column name.</p><p>You are not allow
 the data type. You are not allowed to increase the width of a column that
 is part of a primary or unique key referenced by a foreign key constraint
 or that is part of a foreign key constraint.</p></li>
+
 <li>Specifying the interval between consecutive values of the identity column.<p>To
 set an interval between consecutive values of the identity column, specify
 the <i>integerConstant</i>. You must previously define the column with the IDENTITY
@@ -201,6 +211,13 @@ in the column for which the SET INCREMEN
         there must not be existing NULL values for the column in the table.</p>
     <p>You can remove the NOT NULL constraint from an existing column. To do
         so the column must not be used in a PRIMARY KEY constraint.</p></li>
+
+<li>Changing an identity column from GENERATED ALWAYS to GENERATED BY DEFAULT behavior or vice-versa.
+<p>
+ The SET GENERATED clause may only be applied to identity columns. It cannot be used to convert a non-identity column into an identity column. This clause can be useful if you need to preserve key values when bulk-loading a table from a snapshot or exported dump.
+</p>
+</li>
+
 <li>Changing the default value for a column.
 <p>You can use DEFAULT <i>default-value</i> to change a column default. To disable a
 previously set default, use DROP DEFAULT (alternatively, you can specify NULL as
@@ -279,6 +296,15 @@ ALTER TABLE Employees ALTER COLUMN ssn N
 <ph>-- Change the default value for the SALARY column</ph>
 ALTER TABLE Employees ALTER COLUMN Salary DEFAULT 1000.0
 ALTER TABLE Employees ALTER COLUMN Salary DROP DEFAULT
+
+<ph>-- Bulk load a table by temporarily changing a GENERATED ALWAYS identity column
+-- into a GENERATED BY default column.
+-- After loading the table, reset the identity column to be GENERATED ALWAYS
+-- and move its sequence number forward past the last inserted key.</ph>
+ALTER TABLE targetTable ALTER COLUMN keyCol SET GENERATED BY DEFAULT;
+INSERT INTO targetTable SELECT * FROM sourceTable;
+ALTER TABLE targetTable ALTER COLUMN keyCol SET GENERATED ALWAYS;
+ALTER TABLE targetTable ALTER COLUMN keyCol RESTART WITH 1234567;
 </b></codeblock></section>
 <section><title>Results</title><p>An ALTER TABLE statement causes all statements
 that are dependent on the table being altered to be recompiled before their