On 21-Oct-2014 13:55 -0500, Matt Olson wrote:
Anyone know of a product in DB2 that allows for easier table
changing?
If you have a table with a character column that contains dates and I
want to change the fields to actual DATE columns it doesn't work
using Alter Table.
  Huh.  I figured that restriction would have been removed by now; even 
if only with forcible loss [per DROP] of any dependents.
  FWiW, if all of the character column data is valid for making that 
change [valid dates or the NULL value], then CREATE VIEW suffices quite 
well.  A logical VIEW having become an even a more legitimate 
alternative, since the addition of derived [expression] INDEX support.
In Microsoft SQL it is a couple click affair, change column type and
hit the save button and it will retain all data.  I think it does all
these developer efficiency things in the background:
1.       Renames table to some temporary name
2.       Recreates the table with new data types, fields, etc
3.       Copy all the data from the old table to the new table
4.       Removes the temporary table
It seems in DB2 in IBM i I lose all these efficiencies?
  Both ALTER TABLE and Change Physical File (CHGPF) with the Source 
File (SRCFILE) parameter specified will perform those above steps; 
conspicuously, with certain restrictions.
Anyway to bring this automation back using some tool?
  If the sqlcode -190 [msg SQL0190] still prevents that implicit CAST 
and the physical data must be modified [versus alternatively leaving the 
physical data unchanged while using a logical VIEW of the data], then 
perform two ALTER requests instead of just one.  For example, make the 
TABLE change with the following script.  While that script could be 
created as tooling [probably best run under isolation if the number of 
updated rows can be contained by journaling across the script], there is 
likely to be more work required as a side effect of the change; i.e. the 
change will likely drop most dependents, unless the pseudo-date field 
was relatively unused:
    ALTER TABLE The_Char10_File
     ADD COLUMN newDateField for ndf DATE
    ;
    UPDATE      The_Char10_File
     set originalDateField = newDateField
    ;
    ALTER TABLE The_Char10_File
     drop column originalDateField
    ;
    COMMIT
    ; -- if the script were run under isolation
    ; -- DDL to recreate any dependent files; e.g. any INDEX that had 
the dropped column as a KEY column or that column referenced in a VIEW.
  The above scripted work is hardly as efficient as being able to make 
just the one change with just one ALTER request, but possibly simpler 
than ensuring that a Roll Your Own (RYO) variant of the ALTER feature 
does everything that is required and as efficiently.  Note that primary 
advantages of the ALTER over RYO is that the Keyed Access Paths can be 
preserved versus being rebuilt and that additional techniques to prevent 
overflowing the ASP storage are utilized; large files that can be 
altered but not copied within the same ASP will benefit [copying the 
data offline or increasing disk capacity might be required instead], and 
the overall required CPU from not having to maintain\build indexes is 
reduced [thus less impact to other work on the system].  Establishing 
all the necessary ownership\authority of the re-created objects, if not 
part of the existing DDL scripts, might best be effected by having 
retrieved\stored that information prior to the ALTER activity to prevent 
the loss; some of the DDL sources would need to be changed anyhow, to 
correct references which must be made instead to a DATE data type column.
As an Amazon Associate we earn from qualifying purchases.