Sql convert from dds

From MidrangeWiki
Jump to: navigation, search

WORK IN PROGRESS - please help by editing this document - include code/specific commands where needed

SQL-described tables offer more functionality than DDS-described files.

How to convert from DDS to SQL without breaking existing programs...

Big picture...create a new SQL table to hold the data, build indexes across this new table, rebuild the physical file DDS as a logical file, change the logicals to point at new physical.

  1. Retrieve the SQL for your physical table using API or iNavigator.
    1. change the name of the table to match your company standards
      1. for example, physical file MSPMP100, new SQL name MSPMP100SQ
    2. use old format name for new table
  2. Retrieve list of key fields used across the file
  3. Build indexes using longest number of key fields to shortest
  4. Rebuild the physical file DDS to be a logical file
  5. Change the logical files to point to new physical
    1. if logical uses select/omit change to use dynslt
    2. include a index across select/omit fields
  6. Compile all logical files (including the "old physical")

Stored Procedure GENERATE_SQL()

Beginning with Release 7.1 TR8 (and Release 7.2) the GENERATE_SQL()stored procedure is integrated in the QSYS2 schema. This procedure allows DDS sources to be converted into SQL and stored either as stream file or in a source physical file member. Detailed Information can be found under the following Link: QSYS2.GENERATE_SQL() procedure

It has two modes of operations. It can write SQL to a source member or return it as a recordset, which creates a source member in QTEMP behind the scenes. Here is an example usage of common parameters:

   'TABLEPF', 'BARLIB', 'TABLE',        -- We want to script out the object TABLEPF from schema (libary) BAR of type table (physical file)
   -- 'QSQLSRC', 'BAR', 'TABLEPF',      -- Uncoment to write this to a source member instead of outputing as a resultset
   STATEMENT_FORMATTING_OPTION => 0,    -- Setting to 1 will cause SEU's syntax highlighting to be confused.
   REPLACE_OPTION => 1,                 -- Set to 0 to append to the source member as opposed to overwriting it.
   CREATE_OR_REPLACE_OPTION => 1,       -- If the system supports CREATE OR REPLACE syntax on this object, generate it.
   CONSTRAINT_OPTION => 1,              -- Script out constraints
   DROP_OPTION => 1,                    -- Precede the CREATE statement with a DROP DDL statement.
   QUALIFIED_NAME_OPTION => 0           -- Set to 1 to fully qualify all objects in the generated DDL

It should be noted that you may use the % wildcard in the object and library parameter to generate DDL for multiple objects. However, you will need to set the REPLACE_OPTION parameter to 0 in that case or you will only get the last object generated. Also, the source member you intend to write to must exist.


If QSYS2.GENERATE_SQL() returns an error, its usually not helpful. However the joblog generates helpful messages. You can retrieve the joblog via the usual greenscreen methods or select * from table(qsys2.joblog_info('*')) a.


This article is a stub. You can help by editing it.