实用控制语句

实用程序控制语句定义了实用程序作业执行的功能。

例如,以下 LOAD 实用程序控制语句指定如何将表加载到 DSN8C10. DEPT 表中:

LOAD 
  INTO TABLE DSN8C10.DEPT PART 1 REPLACE

您可以使用 ISPF /PDF编辑功能创建实用程序控制语句,并将其保存在顺序或分区数据集中。

Db2 通常从SYSIN流内数据集中读取实用程序控制语句。 Db2 可以读取SYSLISTD数据集中的LISTDEF控制语句和SYSTEMPL数据集中的TEMPLATE控制语句。

控制语句编码规则

实用程序控制语句必须遵守以下规则:

  • 固定长度记录 :如果记录是80个字符的固定长度记录,则 Db2 忽略第73至80列。
  • 跨记录的语句 :记录在解析前是串联在一起的;因此,一个语句或任何语法结构可以跨越多个记录。 无需使用延续字符。

    但是,如果输入数据集包含可变长度的记录,则 Db2 可能会将第1列中的语句部分解释为上一记录语句的延续。 为避免语法错误,请确保实用程序控制语句中的所有语法结构都正确分隔。

  • 字符集编码 :数据集中的所有实用程序控制语句必须完全使用单一字符集编写。 它们可以用EBCDIC(代码页500)或Unicode UTF-8 (代码页1208)书写。 Db2 如果数据集的第一个字符是以下字符之一,则会自动检测并处理Unicode UTF-8 控制语句:
    • 一个Unicode UTF-8 空格(x'20')
    • Unicode UTF-8 破折号( x'2D' )
    • Unicode UTF-8 大写A到Z(x'41'到 x'5A' )

    在其他情况下,控制语句数据集按EBCDIC处理。 Db2 发送一条信息( DSNU1044I 或 DSNU1045I ),以确定其用于处理语句的字符集。

    避免在输入数据集中将以下EBCDIC字符作为第一个字符:

    ¢ . < ( + | &

    这些EBCDIC字符与Unicode UTF-8 字符J到P具有相同的十六进制代码点值。 因此,控制语句可能会被误认为是Unicode。 这种误解会导致实用程序语法错误。 然而,这些字符可能会导致Unicode到EBCDIC的翻译错误,并在语法错误被检测到之前出现乱码。 在这种情况下,在检测到语法错误后,消息 DSNU005I 可能包含无法识别的语句,消息 DSNU082I 可能识别出无法识别的关键字。

  • 语法 :实用程序语句必须以实用程序的语法开头。 实用程序控制语句中的其他语法结构描述了选项。 您可以用任意数量的空格将这些结构分开。
  • 选项 :在实用程序名称后指定的选项取决于您使用的在线实用程序。 要指定实用程序选项,请指定选项关键字,后跟相关参数(如果有)。 参数值可以是关键字。 您需要将某些参数的值括在括号内。 实用程序控制语句的语法图会在需要的地方显示括号。

    在描述每个实用程序控制语句的语法时,参数缩进到它们必须遵循的选项关键字下。 以下选项就是一个典型的例子:

    WORKDDN ddname
    指定临时工作文件。

    ddname 是临时文件的数据集名称。

    默认值为 SYSUT1

    在这个例子中,WORKDDN是一个可选关键字, ddname 是一个变量参数。 参数值可以放在括号内,但并非必须。 在这种情况下,您可以将临时工作文件指定为 WORKDDN SYSUT1WORKDDN (SYSUT1)

  • 分隔符和小数点字符: 在实用程序控制语句中,当您指定多个需要分隔的数值时,必须使用逗号(“,”)分隔这些值。无论应用程序默认加载模块(DSNHDECP 或用户指定的应用程序默认加载模块)中 DECIMAL 的定义如何,都必须使用此分隔符。 同样,当您在实用程序控制语句中指定十进制数字时,无论应用程序默认加载模块中DECIMAL的定义是什么,都必须使用句点(“.”)。
  • 多个实用程序控制语句 :您可以在 SYSIN 流中指定多个实用程序控制语句。 但是,如果任何控制语句返回的返回代码为8或更高,则作业步骤中的后续语句将不会执行。

    更改开始虽然 Db2 并不限制您可以在单个输入流(SYSIN)中包含的实用程序语句的数量,但运行过多的语句可能会导致失败或长时间运行,具体取决于可用资源。 例如,运行数千个EXEC SQL语句可能需要花费不可接受的时间,或者失败。更改结束

  • 评论 :您可以在SYSIN流中输入评论。 评论必须以两个连字符(--),并遵守以下规则:
    • 在同一行中,您必须使用两个连字符,中间没有空格。
    • 您可以在任何有效空间内开始评论,但分隔符内除外。
    • 评论以句号结束。

    例如,以下语句显示了两个注释:

    // SYSIN DD *
    RUNSTATS TABLESPACE DSNDB06.SYSDDF  -- COMMENT HERE
    -- COMMENT HERE
    /*
  • 连接操作符 :实用程序控制语句支持||连接操作符。 操作符允许在两个分隔字符串之间或两个非分隔字符串之间使用。 (用双引号括起字符串。) 结果是一个字符串,由操作符后面的字符串与操作符前面的字符串连接而成。

    例如,以下语句显示了连接操作符:

    string1  ||  string2

    两者 string1string2 在每个SYSIN输入记录中,语法必须正确。 引号必须在每个字符串内保持平衡。 如果使用双字节字符集(DBCS)字符,则每个字符串中的移出和移入字符必须保持平衡。 任何多字节字符必须完全包含在单个SYSIN记录中。

    ||运算符必须作为独立标记输入,前后各有一个或多个空格。 它可与 “ string1 ” 一起输入,单独输入,或与 “ string2 ” 一起输入。 该操作符在检测到任何上下文或应用语义含义之前在标记级别运行。 以下语句中有一个实用语句示例:

    COPY  INDEX  
           "A" ||
           "B"
    results in:
           COPY INDEX   "AB"
    

    EXEC SQL 控制语句中的 || 运算符在实用程序处理中被忽略,因为该运算符在 SQL 中已有特定含义。 操作符仍然是SQL语句的一部分,以便后续处理。

    ||连接运算符的另一个示例如下:
    LOAD INTO TABLE
    CREA ||
    TOR.
    "TABL" ||
    "ENAME"                                                     

    在这个例子中,字符串 CREA 和 TOR 是非定界字符串,而字符串 TABL 和 ENAME 则是用双引号定界的。 此示例的处理输出结果与以下语句等效:

    LOAD INTO TABLE CREATOR."TABLENAME"
  • RBA和LRSN :在实用程序语句中指定日志点时,为非数据共享环境指定RBA值,为数据共享环境指定LRSN。

在控制语句中使用多字节字符集的提示

在固定80字节的SYSIN数据集中,多字节字符集可能难以处理。 长对象名称和长字符文字可能无法在一行中显示。

在可能的情况下,请使用以下技术避免破坏对象名称或字符字面值:

  • 使用具有可变长度记录或足够长记录的 SYSIN 数据集。
  • 使用较短的物体名称。 名字越长,就越容易出现延续性问题。
  • 如果可能,请按空间名称(表空间或索引空间)处理对象,避免在实用程序语法中指定长多字节表和索引名称。

如有必要,请使用以下续写技巧:

  • 在输入记录中向左或向右移动字符串的起点,使完整的多字节字符在72列结束。 继续下一个输入记录第1列中的下一个字符。
  • 将合格的对象名称按照“.”分隔成两部分, 分隔限定词。 将长名称分成多个部分,可以更轻松地遵守延续规则。 EXEC SQL实用程序不能使用此技术,因为该实用程序必须遵循实用程序和SQL语法规则。
  • 使用||连接运算符将长标识符分为两个或多个部分,分别放入每个SYSIN记录中。