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 函数用法
- 对库的 *EXECUTE 和 *OBJOPR ,以及至少下列其中一项:
- 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 对象
模式为 QSYS2。
- 系统表名
- 一个字符或图形字符串表达式,用于标识包含将为其生成 DDL 的数据库对象的名称和类型的表的名称。 必须指定表的系统名称。 该名称区分大小写。 如果需要,必须指定定界符。 例如,名称为 "abc" 的文件必须指定为 "abc"。 必须以大写形式指定名称为 ABC 的文件。 不支持通配符。
- 系统表模式
- 一个字符或图形字符串表达式,用于标识包含将为其生成 DDL 的数据库对象的名称和类型的表库的名称。 必须指定模式的系统名称。 该名称区分大小写。 如果需要,必须指定定界符。 例如,名称为 "lib1" 的模式必须指定为 "lib1"。 必须以大写形式指定名称为 LIB1 的模式。 不支持通配符。 不允许 *LIBL 和 *CURLIB。
缺省值为 QTEMP。
- 数据库源文件名称
- 一个字符或图形字符串表达式,用于标识包含该过程生成的 SQL 语句的源文件的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。 例如,必须使用周围的引号指定名称为 "abc" 的文件。 必须以大写形式指定名称为 ABC 的文件。
- 数据库源文件库名称
- 一个字符或图形字符串表达式,用于标识包含包含过程生成的 SQL 语句的源文件的库的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。
- 数据库源文件成员
- 一个字符或图形字符串表达式,用于标识包含过程生成的 SQL 语句的源文件成员的名称。 该名称必须是有效的系统名称。 该名称区分大小写。 如果名称需要定界符才能有效,那么必须指定这些定界符。
如果为 database-source-file-library-name, database-source-file-name和 database-source-file-member 提供了值,那么对象必须存在。
如果未指定 database-source-file-member ,那么将使用 Q_GENSQOBJ 。
- 严重性级别
- 操作失败的严重性级别。 如果发生的错误的严重性级别大于或等于此值,那么操作结束。 有效值的范围为 0 到 39 (含)。 任何严重性为 40 的错误都将导致过程失败。
- 替换选项
- 数据库源文件成员 或源流文件的替换选项。 有效值是:如果未指定 replace-option ,那么将使用 1 。
- 0
- 生成的 SQL 语句将附加到数据库源文件成员 或源流文件的末尾。
- 1
- 在添加生成的 SQL 语句之前,将清除数据库源文件成员 或源流文件 。 如果选择此选项,那么即使从过程返回错误,也可能发生清除。
- 语句-格式化-选项
- 在生成的 SQL 语句中使用的格式化选项。 有效值是:如果未指定 statement-格式化-option ,那么将使用 1 。
- 0
- 不会向生成的 SQL 语句添加其他格式化字符。
- 1
- 其他行尾字符和制表符将添加到生成的 SQL 语句中。
- 日期格式
- 在生成的 SQL CREATE TABLE 语句中用于日期常量的日期格式。 日期格式可能不适用于 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 中 ISO , EUR , USA 或 JIS 格式的日期常量。
- 日期分隔符
- 在生成的 SQL CREATE TABLE 语句中用于日期常量的日期分隔符。 日期分隔符可能不适用于 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中 ISO , EUR , USA 或 JIS 格式的日期常量。
- 时间格式
- 在生成的 SQL CREATE TABLE 语句中用于时间常量的格式。 时间格式可能不适用于在 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中采用 ISO , EUR , USA 或 JIS 格式的时间常量。
- 时间分隔符
- 在生成的 SQL CREATE TABLE 语句中用于时间常量的时间分隔符。 时间分隔符可能不适用于在 CREATE VIEW , CREATE TRIGGER , CREATE FUNCTION , CREATE PROCEDURE , CREATE MASK 或 CREATE PERMISSION 语句中采用 ISO , EUR , USA 或 JIS 格式的时间常量。
- 命名选项
- 用于生成的 SQL 语句中的限定名的命名约定。 有效值是:如果未指定 命名选项 ,那么将使用 SQL 。
- SQL
- schema.table 语法
- SYS
- 库/文件语法
- 小数点
- 用于数字常量的小数点。 有效值是:如果未指定 decimal-point ,那么将使用 . 。
- .
- 句点分隔符
- ,
- 逗号分隔符
- 标准-选项
- 标准选项指定生成的 SQL 语句是否应包含 Db2® for i 扩展,或者这些语句是否应符合 Db2 系列 SQL 或 ANS 和 ISO SQL 标准。 有效值是:如果未指定 标准-选项 ,那么将使用 0 。
- 0
- 可以在 SQL 语句中生成 Db2 for i 扩展。
- 1
- 生成的 SQL 语句必须符合 Db2 系列的公共 SQL 语句。
- 2
- 生成的 SQL 语句必须符合 ANSI 和 ISO SQL 标准。
- 下拉选项
- 删除选项指定是否应在 CREATE 语句之前生成 DROP (或 ALTER) SQL 语句以删除指定的对象。 有效值是:如果未指定 drop-option ,那么将使用 0 。
- 0
- 不应生成 DROP 语句。
- 1
- 应生成 DROP 语句。
- 消息级别
- 生成消息的严重性级别。 如果发生严重性级别大于此值的错误,那么将在输出中生成一条消息。 有效值的范围为 0 到 39 (含)。 消息级别必须小于或等于严重性级别。
- 注释-选项
- 注释选项指定在指定数据库对象上存在注释时是否应生成 COMMENT SQL 语句。 如果指定的数据库对象不支持注释,那么将忽略注释选项。 有效值是:如果未指定 comment-option ,那么将使用 1 。
- 0
- 不应生成 COMMENT SQL 语句。
- 1
- 应生成 COMMENT SQL 语句。 如果指定的数据库对象类型是表或视图,那么还将为表或视图的列生成 COMMENT SQL 语句。
2
- 应生成
COMMENT SQL 语句。 如果指定的数据库对象没有注释,并且其类型为 INDEX , SEQUENCE , TABLE , TYPE , VARIABLE , VIEW 或 XSR ,那么系统对象文本将用于注释。 
- label-选项
- 如果指定的数据库对象上存在标签,那么 label 选项指定是否应生成 LABEL SQL 语句。 如果指定的数据库对象不支持标签,那么将忽略 label 选项。 有效值是:如果未指定 label-option ,那么将使用 1 。
- 0
- 不应生成 LABEL SQL 语句。
- 1
- 应生成 LABEL SQL 语句。 如果指定的数据库对象类型是表或视图,那么还将为表或视图的列生成 LABEL SQL 语句。
- 页眉选项
- 头选项指定是否应该在第一个生成的语句之前生成头。 头由用于描述版本,日期和时间,关系数据库以及用于生成 SQL 语句的某些选项的注释组成。 有效值是:如果未指定 header-option ,那么将使用 1 。
- 0
- 不应生成头。
- 1
- 应生成头。
- 触发选项
- 触发器选项指定当对象类型为 TABLE 或 VIEW 时是否应生成触发器。 有效值是:如果未指定 trigger-option ,那么将使用 1 。
- 0
- 不应生成触发器。
- 1
- 应生成触发器。
- constraint-选项
- 约束选项指定当对象类型为 TABLE 时是否应生成约束。 有效值是:如果未指定 constraint-option ,那么将使用 1 。
- 0
- 不应生成约束。
- 1
- 应生成约束。
- 2
- 应在 CREATE TABLE 语句中生成约束。
- 系统名选项
- 系统名称选项指定当系统名称与 SQL 名称不同且对象类型为 INDEX , TABLE , VIEW , SEQUENCE , 或 VARIABLE时,是否应该为系统名称生成 FOR SYSTEM NAME 子句 。 有效值是:如果未指定 system-name-option ,那么将使用 1 。
- 0
- 不应生成 FOR SYSTEM NAME 子句 。
- 1
- 应生成 FOR SYSTEM NAME 子句 。
- 特权-选项
- 特权选项指定是否应在指定的数据库对象上生成 GRANT SQL 语句。 如果指定的数据库对象不支持特权,那么将忽略特权选项。 有效值是:如果未指定 特权-选项 ,那么将使用 1 。
- 0
- 不应生成 GRANT SQL 语句。
- 1
- 应生成 GRANT SQL 语句。
- ccsid-选项
- CCSID 选项指定当对象类型为 TABLE 时是否应为列定义生成 CCSID 属性。 有效值是:如果未指定 ccsid-option ,那么将使用 1 。
- 0
- 不应生成 CCSID 属性。
- 1
- 应生成 CCSID 属性。
- 创建或替换选项
- 创建或替换选项指定是否应该为 CREATE 语句上指定的数据库对象生成 CREATE OR REPLACE。 如果指定的数据库对象不支持 CREATE 或 REPLACE ,那么将忽略此选项。 有效值是:如果未指定 create-or-replace-option ,那么将使用 0 。
- 0
- 不应生成 CREATE OR REPLACE。
- 1
- 应生成 CREATE OR REPLACE。
- obfuscate-选项
- obfuscate 选项指定是否应该对未使用模糊语句创建的 SQL 函数, SQL 过程或 SQL 触发器返回模糊 SQL 语句。 如果标准选项不是 "0" ,那么将忽略此选项。 如果对象不是 SQL 函数,过程或触发器,那么也会忽略此选项。 如果对象已被模糊处理,那么将忽略此选项。 设置 Obfuscate 选项 0 不能用作获取模糊对象的 unobfuscated SQL 语句的方法。 有效值是:如果未指定 obfuscate-option ,那么将使用 0 。
- 0
- 不应生成模糊化语句。
- 1
- 应该为 SQL 函数, SQL 过程或 SQL 触发器生成模糊化语句。
- 激活访问控制选项
- 激活行和列访问控制选项指定当对象类型为 TABLE 时是否应生成 ALTER TABLE 以激活行和列访问控制。 如果标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:如果未指定 activate-access-control-option ,那么将使用 1 。
- 0
- 不应生成激活行和列访问控制。
- 1
- 应生成激活行和列访问控制。
- 掩码和权限选项
- 掩码和许可权选项指定当对象类型为 TABLE 时是否应生成行许可权和列掩码。 如果标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:如果未指定 mask-and-permission-option ,那么将使用 1 。
- 0
- 不应生成许可权和掩码。
- 1
- 应生成许可权和掩码。
- 限定名称选项
- 限定名选项指定应该为指定的数据库对象生成限定名还是非限定名。 有效值是:如果未指定 qualified-name-option ,那么将使用 0 。
- 0
- 应生成限定对象名。 SQL 例程主体中的未限定名称将保持未限定状态。
- 1
- 当找到与数据库对象库名匹配的库时,应生成未限定的对象名。 将以其标准格式生成任何由 RDB 限定的 SQL 对象或列引用。 例如, rdb-name.schema-name.table-name 和 rdb-name.schema-name.table-name.column-name 引用将保留其完整资格。
- 附加索引选项
- 附加索引选项指定是否将为 DDS 创建的键控物理文件或逻辑文件生成附加 CREATE INDEX 语句。 有效值是:如果未指定 additional-index-option ,那么将使用 0 。
- 0
- 将不会生成其他 CREATE INDEX 语句。
- 1
- 将生成与 DDS 创建的键控物理文件的索引相匹配的附加 CREATE INDEX 语句。 如果物理文件具有主键约束,那么不会生成 CREATE INDEX 语句。
- 索引代替视图选项
- 索引而不是视图选项指定是否将为 DDS 创建的键控逻辑文件生成 CREATE INDEX 或 CREATE VIEW 语句。 有效值是:如果未指定 index-instead-of-view-option ,那么将使用 0 。
- 0
- 将生成 CREATE VIEW 语句。
- 1
- 对于 DDS 创建的键控逻辑文件的索引,将生成与该索引匹配的 CREATE INDEX 语句。
- 临时选项
- 当对象类型为 TABLE 并且该表定义为时态表时,该临时选项指定是否将生成 CREATE TABLE 和 ALTER TABLE 语句。 如果对象不是时态表,或者标准选项不是 "0" 或 "1" ,那么将忽略此选项。 有效值是:
- 0
- 将生成 CREATE TABLE 语句。
- 1
- 将生成 CREATE TABLE 语句,并将生成 ALTER TABLE 语句以添加版本控制。
- 2
- 将仅生成 ALTER TABLE 语句以添加版本控制。
- 源流文件
- 一个字符或图形字符串表达式,用于标识包含该过程生成的 SQL 语句的源流文件。 除非 database-source-file-name 具有值 *STMF ,否则将忽略此参数。
如果该文件不存在,那么将使用 source-stream-file-ccsid指定的 CCSID 来创建该文件。 当将行写入文件时, source-stream-file-end-of-line 确定要附加到每行的行尾序列 (如果有)。
使用 source-stream-file 时,将忽略为 database-source-file-library-name 和 database-source-file-member 提供的值。
正在写入 QSYS.LIB 文件系统不受支持。
- 源流文件行尾
- 一个字符或图形字符串表达式,用于定义在写入 source-stream-file时将附加到每行末尾的行结束字符。 回车符始终为 X’0D’。 根据源流文件的 CCSID ,换行符对于 EBCDIC CCSID 为 X’25’ ,对于 ASCII 和 UTF-8 CCSID 为 X’0A’ 。 有效值是:
- 源流文件-ccsid
- 一个整数值,用于定义在创建新的源流文件时要使用的 CCSID。 如果指定了 source-stream-file 并且源流文件不存在,那么将使用此 CCSID 值创建该文件。 值 0 指示将使用缺省作业 CCSID。 不能指定 CCSID 65535。
如果未指定 source-stream-file-ccsid ,那么将使用 0。
写入源文件时,将忽略此参数。
注意
- 如果在为对象生成 DDL 时发生错误,那么源文件 或源流文件 将包含该错误,并且处理将继续到下一个对象。 处理完最后一个对象后,将返回警告 SQLSTATE'01H52'。
- 按以下顺序生成对象:
- 模式
- 类型
- 序列
- 别名
- 非 MQT 表以及这些表的任何约束和索引
- 函数
- 过程
- 变量
- 视图, DDS 创建的逻辑文件和 MQT 以及这些表上的任何约束和索引
- 触发器
- 掩码
- 许可权
- 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');
