GENERATE_SQL_OBJECTS 过程

GENERATE_SQL_OBJECTS 过程生成重新创建一组数据库对象所需的 SQL 数据定义语言 (DDL) 语句。 结果将返回到指定的数据库源文件成员 source stream file或作为结果集。 该过程将生成对象,以便在依赖对象之后生成从属对象。

数据库源文件成员 或集成文件系统 (IFS) 流文件 将包含生成的 SQL 语句。 如果输出源文件是 QTEMP/Q_GENSQOBJ ,那么还会将源文件作为结果集返回。

权限

当写入数据库源物理文件时,调用者必须具有:
  • *EXECUTE 到包含源物理文件的库
  • 要添加成员:
    • *OBJOPR 和 *ADD 到源物理文件
  • 要替换成员:
    • *OBJOPR , *DELETE , *ADD 和 *OBJMGT 或 *OBJALTER 到源物理文件
写入 IFS 流文件时:
  • 对正在写入的流文件之前的每个目录执行 (*X) 数据权限
  • 当流文件存在时:
    • 对流文件的写 (*W) 数据权限
  • 当流文件不存在时:
    • 对流文件的父目录的写和执行 (*WX) 权限
要为对象类型生成源,需要以下权限:
  • TABLE , VIEW , CONSTRAINT 或 TRIGGER
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *FILE 对象
  • 索引
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *FILE 对象,以及
    • *OBJOPR 到基本 *FILE 对象
  • MASK 或 PERMISSION
    • 对库的 *EXECUTE 和 *OBJOPR ,以及至少下列其中一项:
      • *OBJOPR 到 *FILE 对象
      • QIBM_DB_SECADM 函数用法
  • ALIAS
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *FILE 对象
  • FUNCTION 或 PROCEDURE
    • *OBJOPR 到库
  • 类型
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *SQLUDT 对象
  • SCHEMA
    • *OBJOPR 以及 *LIB 对象的 *READ 或 *EXECUTE
  • SEQUENCE
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *USE 到 *DTAARA 对象
  • 变量
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *SRVPGM 对象
  • XSR
    • 对库的 *EXECUTE 和 *OBJOPR ,以及
    • *OBJOPR 到 *SQLXSR 对象
读取语法图跳过可视语法图 GENERATE_SQL_OBJECTS ( 系统表名 =>  system_table-名称 ,系统表模式 => 系统表模式,数据库源文件名称 => 数据库源文件名称,数据库源文件库名称 => 数据库源文件库名称,数据库源文件成员 => 数据库源文件成员,严重性级别 => 严重性级别,替换选项 => replace-选项,语句格式化选项 => 语句-格式化-选项,date_format => 日期格式,日期分隔符 => 日期分隔符,time_format => 时间格式,TIME_分隔符 => 时间分隔符,命名选项 => 命名选项,DECIMAL_POINT => 小数点,标准 ARDS_OPTION => 标准选项,DROP_OPTION => 删除选项,消息级别 => 消息级别,命令选项 => comment-选项,标签选项 => label-选项,HEADER_OPTION => header-选项,触发器选项 => 触发器选项,选项 (RAINT_OPTION) => 约束选项,系统名称选项 => system-name-选项,特权 _ 选项 => 特权-选项,CCSID_OPTION => ccsid-选项,创建或替换选项 => 创建或替换选项,混淆选项 => obfuscate-选项,激活行和列的访问控制选项 => activate-access-control-选项,掩码和许可选项 => 掩码和权限选项,限定名称选项 => 限定名选项,附加索引选项 => additional-index-选项,索引代替视图选项 => 索引代替视图选项,时间选项 => 临时选项,源流文件 => 源流文件,源流文件行尾 => 源流文件行尾,源流文件ccsid => 源流文件-ccsid )
模式为 QSYS2。
系统表名
一个字符或图形字符串表达式,用于标识包含将为其生成 DDL 的数据库对象的名称和类型的表的名称。 必须指定表的系统名称。 该名称区分大小写。 如果需要,必须指定定界符。 例如,名称为 "abc" 的文件必须指定为 "abc"。 必须以大写形式指定名称为 ABC 的文件。 不支持通配符。
指定的表必须包含三列,其中包含将为其生成 DDL 的对象的名称和类型。 表的列名必须是 OBJECT_SCHEMA , OBJECT_NAME 和 SQL_OBJECT_TYPE (按此顺序)。
例如,创建类似如下的表:
CREATE TABLE QTEMP.INORDER (OBJECT_SCHEMA VARCHAR(258), 
                            OBJECT_NAME VARCHAR(258), 
                            SQL_OBJECT_TYPE CHAR(10));
必须根据 QSQGNDDL API 中相应参数的以下规则来指定列的内容。 表中的每行必须标识与表中的每个其他对象不同的对象。
object_schema
标识将为其生成 DDL 的对象的模式名称。 如果 SQL 语句中需要定界符,那么必须对名称进行定界。 如果指定的对象类型为 SCHEMA ,那么将忽略此名称。 不允许 *LIBL 和 *CURLIB。
object_name
标识将为其生成 DDL 的对象的名称。 如果 SQL 语句中需要定界符,那么必须对名称进行定界。 如果对象类型是 FUNCTION 或 PROCEDURE ,那么此名称必须是函数或过程的特定名称。 如果为对象类型指定了 TABLE 或 VIEW ,那么对象名不得标识别名。
sql_object_type
标识将为其生成 DDL 的对象的 SQL 对象类型。
ALIAS
对象是 SQL 别名。
约束
对象属性是约束。
函数
对象是 SQL 函数。
索引
对象是 SQL 索引。
MASK
对象是 SQL 列掩码。
PERMISSION
对象是 SQL 行许可权。
PROCEDURE
对象是 SQL 过程。
SCHEMA
对象是 SQL 模式。
SEQUENCE
对象是 SQL 序列。
对象是 SQL 表或物理文件。
触发器
对象属性是触发器。
类型
对象是 SQL 类型。
变量
对象是 SQL 全局变量。
VIEW
对象是 SQL 视图或逻辑文件。
XSR
该对象是 XML 模式存储库对象。
系统表模式
一个字符或图形字符串表达式,用于标识包含将为其生成 DDL 的数据库对象的名称和类型的表库的名称。 必须指定模式的系统名称。 该名称区分大小写。 如果需要,必须指定定界符。 例如,名称为 "lib1" 的模式必须指定为 "lib1"。 必须以大写形式指定名称为 LIB1 的模式。 不支持通配符。 不允许 *LIBL 和 *CURLIB。

缺省值为 QTEMP。

数据库源文件名称
一个字符或图形字符串表达式,用于标识包含该过程生成的 SQL 语句的源文件的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。 例如,必须使用周围的引号指定名称为 "abc" 的文件。 必须以大写形式指定名称为 ABC 的文件。
指定源文件的记录长度必须大于或等于 92。
可以包含以下特殊值:
*STMF
输出将写入 source-stream-file
如果未指定 database-source-file-name ,那么将使用 Q_GENSQOBJ
数据库源文件库名称
一个字符或图形字符串表达式,用于标识包含包含过程生成的 SQL 语句的源文件的库的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。
如果未指定 database-source-file-library-name ,那么将使用 QTEMP
数据库源文件成员
一个字符或图形字符串表达式,用于标识包含过程生成的 SQL 语句的源文件成员的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。

如果为 database-source-file-library-namedatabase-source-file-namedatabase-source-file-member 提供了值,那么对象必须存在。

如果未指定 database-source-file-member ,那么将使用 Q_GENSQOBJ

严重性级别
操作失败的严重性级别。 如果发生的错误的严重性级别大于或等于此值,那么操作结束。 有效值的范围为 0 到 39 (含)。 任何严重性为 40 的错误都将导致过程失败。
如果未指定 severity-level ,那么将使用 39
替换选项
数据库源文件成员 或源流文件的替换选项。 有效值是:
0
生成的 SQL 语句将附加到数据库源文件成员 或源流文件的末尾。
1
在添加生成的 SQL 语句之前,将清除数据库源文件成员 或源流文件 。 如果选择此选项,那么即使从过程返回错误,也可能发生清除。
如果未指定 replace-option ,那么将使用 1
语句-格式化-选项
在生成的 SQL 语句中使用的格式化选项。 有效值是:
0
不会向生成的 SQL 语句添加其他格式化字符。
1
其他行尾字符和制表符将添加到生成的 SQL 语句中。
如果未指定 statement-格式化-option ,那么将使用 1
日期格式
在生成的 SQL CREATE TABLE 语句中用于日期常量的日期格式。 日期格式可能不适用于 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 中 ISO , EUR , USA 或 JIS 格式的日期常量。
如果未指定 date-format ,那么将使用 ISO
日期分隔符
在生成的 SQL CREATE TABLE 语句中用于日期常量的日期分隔符。 日期分隔符可能不适用于 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中 ISO , EUR , USA 或 JIS 格式的日期常量。
如果未指定 date-分隔符 ,那么将使用 -
时间格式
在生成的 SQL CREATE TABLE 语句中用于时间常量的格式。 时间格式可能不适用于在 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中采用 ISO , EUR , USA 或 JIS 格式的时间常量。
如果未指定 time-format ,那么将使用 ISO
时间分隔符
在生成的 SQL CREATE TABLE 语句中用于时间常量的时间分隔符。 时间分隔符可能不适用于在 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中采用 ISO , EUR , USA 或 JIS 格式的时间常量。
如果未指定 time-分隔符 ,那么将使用 .
命名选项
用于生成的 SQL 语句中的限定名的命名约定。 有效值是:
SQL
schema.table 语法
SYS
库/文件语法
如果未指定 命名选项 ,那么将使用 SQL
小数点
用于数字常量的小数点。 有效值是:
.
句点分隔符
,
逗号分隔符
如果未指定 decimal-point ,那么将使用 .
标准-选项
标准选项指定生成的 SQL 语句是否应包含 Db2® for i 扩展,或者这些语句是否应符合 Db2 系列 SQL 或 ANS 和 ISO SQL 标准。 有效值是:
0
可以在 SQL 语句中生成 Db2 for i 扩展。
1
生成的 SQL 语句必须符合 Db2 系列的公共 SQL 语句。
2
生成的 SQL 语句必须符合 ANSI 和 ISO SQL 标准。
如果未指定 标准-选项 ,那么将使用 0
下拉选项
删除选项指定是否应在 CREATE 语句之前生成 DROP (或 ALTER) SQL 语句以删除指定的对象。 有效值是:
0
不应生成 DROP 语句。
1
应生成 DROP 语句。
如果未指定 drop-option ,那么将使用 0
消息级别
生成消息的严重性级别。 如果发生严重性级别大于此值的错误,那么将在输出中生成一条消息。 有效值的范围为 0 到 39 (含)。 消息级别必须小于或等于严重性级别。
如果未指定 message-level ,那么将使用 0
注释-选项
注释选项指定在指定数据库对象上存在注释时是否应生成 COMMENT SQL 语句。 如果指定的数据库对象不支持注释,那么将忽略注释选项。 有效值是:
0
不应生成 COMMENT SQL 语句。
1
应生成 COMMENT SQL 语句。 如果指定的数据库对象类型是表或视图,那么还将为表或视图的列生成 COMMENT SQL 语句。
开始更改2结束更改
应生成 开始更改COMMENT SQL 语句。 如果指定的数据库对象没有注释,并且其类型为 INDEX , SEQUENCE , TABLE , TYPE , VARIABLE , VIEW 或 XSR ,那么系统对象文本将用于注释。 结束更改
开始更改如果指定的数据库对象类型是表或视图,那么还将为表或视图的列生成 COMMENT SQL 语句。结束更改
如果未指定 comment-option ,那么将使用 1
label-选项
如果指定的数据库对象上存在标签,那么 label 选项指定是否应生成 LABEL SQL 语句。 如果指定的数据库对象不支持标签,那么将忽略 label 选项。 有效值是:
0
不应生成 LABEL SQL 语句。
1
应生成 LABEL SQL 语句。 如果指定的数据库对象类型是表或视图,那么还将为表或视图的列生成 LABEL SQL 语句。
如果未指定 label-option ,那么将使用 1
页眉选项
头选项指定是否应该在第一个生成的语句之前生成头。 头由用于描述版本,日期和时间,关系数据库以及用于生成 SQL 语句的某些选项的注释组成。 有效值是:
0
不应生成头。
1
应生成头。
如果未指定 header-option ,那么将使用 1
触发选项
触发器选项指定当对象类型为 TABLE 或 VIEW 时是否应生成触发器。 有效值是:
0
不应生成触发器。
1
应生成触发器。
如果未指定 trigger-option ,那么将使用 1
constraint-选项
约束选项指定当对象类型为 TABLE 时是否应生成约束。 有效值是:
0
不应生成约束。
1
应生成约束。
2
应在 CREATE TABLE 语句中生成约束。
如果未指定 constraint-option ,那么将使用 1
系统名选项
系统名称选项指定当系统名称与 SQL 名称不同且对象类型为 INDEX , TABLE , VIEW , SEQUENCE ,VARIABLE时,是否应该为系统名称生成 FOR SYSTEM NAME 子句 。 有效值是:
0
不应生成 FOR SYSTEM NAME 子句
1
应生成 FOR SYSTEM NAME 子句
如果未指定 system-name-option ,那么将使用 1
特权-选项
特权选项指定是否应在指定的数据库对象上生成 GRANT SQL 语句。 如果指定的数据库对象不支持特权,那么将忽略特权选项。 有效值是:
0
不应生成 GRANT SQL 语句。
1
应生成 GRANT SQL 语句。
如果未指定 特权-选项 ,那么将使用 1
ccsid-选项
CCSID 选项指定当对象类型为 TABLE 时是否应为列定义生成 CCSID 属性。 有效值是:
0
不应生成 CCSID 属性。
1
应生成 CCSID 属性。
如果未指定 ccsid-option ,那么将使用 1
创建或替换选项
创建或替换选项指定是否应该为 CREATE 语句上指定的数据库对象生成 CREATE OR REPLACE。 如果指定的数据库对象不支持 CREATE 或 REPLACE ,那么将忽略此选项。 有效值是:
0
不应生成 CREATE OR REPLACE。
1
应生成 CREATE OR REPLACE。
如果未指定 create-or-replace-option ,那么将使用 0
obfuscate-选项
obfuscate 选项指定是否应该对未使用模糊语句创建的 SQL 函数, SQL 过程或 SQL 触发器返回模糊 SQL 语句。 如果标准选项不是 "0" ,那么将忽略此选项。 如果对象不是 SQL 函数,过程或触发器,那么也会忽略此选项。 如果对象已被模糊处理,那么将忽略此选项。 设置 Obfuscate 选项 0 不能用作获取模糊对象的 unobfuscated SQL 语句的方法。 有效值是:
0
不应生成模糊化语句。
1
应该为 SQL 函数, SQL 过程或 SQL 触发器生成模糊化语句。
如果未指定 obfuscate-option ,那么将使用 0
激活访问控制选项
激活行和列访问控制选项指定当对象类型为 TABLE 时是否应生成 ALTER TABLE 以激活行和列访问控制。 如果标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:
0
不应生成激活行和列访问控制。
1
应生成激活行和列访问控制。
如果未指定 activate-access-control-option ,那么将使用 1
掩码和权限选项
掩码和许可权选项指定当对象类型为 TABLE 时是否应生成行许可权和列掩码。 如果标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:
0
不应生成许可权和掩码。
1
应生成许可权和掩码。
如果未指定 mask-and-permission-option ,那么将使用 1
限定名称选项
限定名选项指定应该为指定的数据库对象生成限定名还是非限定名。 有效值是:
0
应生成限定对象名。 SQL 例程主体中的未限定名称将保持未限定状态。
1
当找到与数据库对象库名匹配的库时,应生成未限定的对象名。 将以其标准格式生成任何由 RDB 限定的 SQL 对象或列引用。 例如, rdb-name.schema-name.table-name 和 rdb-name.schema-name.table-name.column-name 引用将保留其完整资格。
如果未指定 qualified-name-option ,那么将使用 0
附加索引选项
附加索引选项指定是否将为 DDS 创建的键控物理文件或逻辑文件生成附加 CREATE INDEX 语句。 有效值是:
0
将不会生成其他 CREATE INDEX 语句。
1
将生成与 DDS 创建的键控物理文件的索引相匹配的附加 CREATE INDEX 语句。 如果物理文件具有主键约束,那么不会生成 CREATE INDEX 语句。
对于 DDS 创建的键控逻辑文件的索引,将生成与该索引匹配的其他 CREATE INDEX 语句。 如果为索引而不是视图选项指定了值 "1" ,那么不会生成额外的 CREATE INDEX 语句。 对于 DDS 创建的连接逻辑文件的连接索引,还将生成与这些索引匹配的其他 CREATE INDEX 语句。
如果未指定 additional-index-option ,那么将使用 0
索引代替视图选项
索引而不是视图选项指定是否将为 DDS 创建的键控逻辑文件生成 CREATE INDEX 或 CREATE VIEW 语句。 有效值是:
0
将生成 CREATE VIEW 语句。
1
对于 DDS 创建的键控逻辑文件的索引,将生成与该索引匹配的 CREATE INDEX 语句。
如果未指定 index-instead-of-view-option ,那么将使用 0
临时选项
当对象类型为 TABLE 并且该表定义为时态表时,该临时选项指定是否将生成 CREATE TABLE 和 ALTER TABLE 语句。 如果对象不是时态表,或者标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:
0
将生成 CREATE TABLE 语句。
1
将生成 CREATE TABLE 语句,并将生成 ALTER TABLE 语句以添加版本控制。
2
将仅生成 ALTER TABLE 语句以添加版本控制。
如果未指定 temporal-option ,那么将使用 0
源流文件
一个字符或图形字符串表达式,用于标识包含该过程生成的 SQL 语句的源流文件。 除非 database-source-file-name 具有值 *STMF ,否则将忽略此参数。

如果该文件不存在,那么将使用 source-stream-file-ccsid指定的 CCSID 来创建该文件。 当将行写入文件时, source-stream-file-end-of-line 确定要附加到每行的行尾序列 (如果有)。

使用 source-stream-file 时,将忽略为 database-source-file-library-namedatabase-source-file-member 提供的值。

正在写入 QSYS.LIB 文件系统不受支持。

源流文件行尾
一个字符或图形字符串表达式,用于定义在写入 source-stream-file时将附加到每行末尾的行结束字符。 回车符始终为 X’0D’。 根据源流文件的 CCSID ,换行符对于 EBCDIC CCSID 为 X’25’ ,对于 ASCII 和 UTF-8 CCSID 为 X’0A’ 。 有效值是:
CR
将追加回车符。
CRLF
将追加回车符和换行符。
LF
将追加换行符。
LFCR
将追加换行符和回车符。

如果未指定 source-stream-file-end-of-line ,那么将使用 CRLF。

写入源文件时,将忽略此参数。

源流文件-ccsid
一个整数值,用于定义在创建新的源流文件时要使用的 CCSID。 如果指定了 source-stream-file 并且源流文件不存在,那么将使用此 CCSID 值创建该文件。 值 0 指示将使用缺省作业 CCSID。 不能指定 CCSID 65535。

如果未指定 source-stream-file-ccsid ,那么将使用 0。

写入源文件时,将忽略此参数。

注意

  • 如果在为对象生成 DDL 时发生错误,那么源文件 或源流文件 将包含该错误,并且处理将继续到下一个对象。 处理完最后一个对象后,将返回警告 SQLSTATE'01H52'。
  • 按以下顺序生成对象:
    1. 模式
    2. 类型
    3. 序列
    4. 别名
    5. 非 MQT 表以及这些表的任何约束和索引
    6. 函数
    7. 过程
    8. 变量
    9. 视图, DDS 创建的逻辑文件和 MQT 以及这些表上的任何约束和索引
    10. 触发器
    11. 掩码
    12. 许可权
    13. XSR 对象

限制

  • 此过程的一个用途是使用 QUALIFIED_NAME_OPTION=>1在另一个库中创建一组对象的克隆,设置当前模式和路径,然后运行生成的脚本。
    • 如果依赖对象未包含在将生成 DDL 的对象列表中,那么尝试运行生成的脚本时可能会发生错误。 例如,如果视图 V1 基于表 T1,但仅指定了 V1 ,那么尝试运行生成的脚本将失败,因为未包含 T1 。
    • 此过程所基于的 QSQGNDDL API 在某些情况下生成限定名。 因此,可能需要在运行脚本之前对其进行轻微修改。 有关更多信息,请参阅 生成数据定义语言 (QSQGNDDL) API 中的 "限定名" 选项参数。
  • 运行生成的脚本时,将不会创建具有 DEFAULT 子句的参数的函数或过程,该子句引用变量,视图或 MQT。 这是因为变量,视图和 MQT 是在函数和过程之后生成的。 请注意,对函数或过程主体中的变量,视图和 MQT 的引用是软依赖关系,不会阻止创建。
  • 在运行生成的脚本时,包含引用视图或 MQT 的 DEFAULT 子句的变量将不会创建。 这是因为视图和 MQT 是在变量之后生成的。

示例

  • 为 QTEMP.INORDER 文件。
    CALL QSYS2.GENERATE_SQL_OBJECTS('INORDER', 'QTEMP');