用于执行字段过程的参数列表
字段过程参数列表将常规信息传达给字段过程。
参数列表指示要执行的操作,并允许字段过程发出错误信号。 Db2®为传递给字段存储过程的所有参数提供存储空间。 因此,按地址将参数传递到字段过程。
在字段过程中定义和使用参数时,应注意确保不会为给定参数引用比为该参数定义的存储空间更多的存储空间。 这些参数都存储在同一个空间中,超过给定参数的存储空间会覆盖另一个参数的值。 这反过来会导致字段过程查看无效的输入数据或导致返回到数据库的值无效。
- 参数 1
- 一个小 (2 字节) 整数,用于描述要执行的函数。 此参数仅为输入。 受支持的值为:
- 0-字段编码
- 4-字段解码
- 8-字段定义
- 参数 2
- 定义字段过程参数值列表 (FPPVL) 的结构。
- 对于函数代码 8 ,此参数是输入/输出。
- 对于函数代码 0 和 4 ,此参数包含函数代码 8 调用的输出。 此参数仅为输入
- 参数 3
- 由列值描述符 (CVD) 定义的解码数据属性。 这是在 CREATE TABLE 或 ALTER TABLE 时间指定的列属性。 此参数仅为输入。
- 参数 4
- 解码的数据。 确切的结构取决于函数代码。
- 如果函数代码为 8 ,那么为 NULL 值。 此参数仅为输入。
- 如果函数代码为 0 ,那么表示要编码的数据。 此参数仅为输入。
- 如果函数代码为 4 ,那么这是用于放置已解码数据的位置。 此参数仅输出。
- 参数 5
- 由 "字段值描述符" (FVD) 定义的编码数据属性。
- 如果函数代码为 8 ,那么是包含已编码数据属性的结构。 此参数仅输出。
- 如果是函数代码 0 或 4 ,那么是包含由函数 8 调用返回的编码数据属性的结构。 此参数仅为输入。
- 参数 6
- 由 "字段值描述符" (FVD) 定义的编码数据。 确切的结构取决于函数代码。
- 如果函数代码为 8 ,那么为 NULL 值。 此参数仅为输入。
- 如果函数代码为 0 ,那么是用于放置已编码数据的位置。 此参数仅输出。
- 如果是函数代码 4 ,那么是数据的编码格式。 此参数仅为输入。
- 参数 7
- SQLSTATE (字符 (5))。 此参数是输入/输出。此参数由 Db2 在调用字段过程之前设置为 "00000"。 它可以由字段过程设置。 虽然通常 SQLSTATE 不是由字段过程设置的,但它可用于向数据库发出错误信号,如下所示:
- 如果字段过程检测到错误,那么应该将 SQLSTATE 设置为 "38xxx" ,其中 xxx 可能是若干可能的字符串之一。 有关更多信息,请参阅 Db2 消息和代码。
- 参数 8
- 消息文本区域 (varchar (1000))。 此参数是输入/输出。
此参数由 Db2 在调用字段过程之前设置为空字符串。 这是一个 VARCHAR (1000) 值,当字段过程发出 SQLSTATE 错误信号时,该值可由字段过程用于将消息文本发送回。 除非字段过程设置了 SQLSTATE 参数,否则 Db2 将忽略消息文本。 假定消息文本采用作业 CCSID。
- 参数 9
- 包含字段过程的其他信息的 128 字节结构。 此参数仅为输入。此结构由 Db2 在调用字段过程之前设置。
- sqlfpNoMask -对于屏蔽数据的字段过程,它指示调用者是要求对数据进行解码而不进行屏蔽的系统函数。 例如,在某些情况下, RGZPFM 和 ALTER TABLE 可能需要复制数据。 如果字段过程在执行这些操作时忽略此参数并屏蔽数据,那么列数据将丢失。 因此,屏蔽数据的字段过程正确处理此参数至关重要。受支持的值为:
- "0"-需要时应用正常屏蔽。
- "1"-不屏蔽,正在代表数据库管理器执行此解码操作。
- sqlfpOperation -此参数指示是否对正在为键定位操作构建键值的编码操作调用字段过程。 在使用非 SQL 接口访问数据的应用程序中,RPG SETLL、RPG CHAIN 和 COBOL START 等关键定位操作很常见。 此参数对于屏蔽数据的字段过程很有用。受支持的值为:
- "0"-未调用密钥定位。
- "1"-已针对密钥定位进行调用。
如果字段过程在用于构建键值的编码请求上迂到掩码值,那么该字段过程需要执行两个操作:- 在参数 7 中返回 SQLSTATE "09501" ,这将导致键定位操作失败并产生字段过程错误。
- 返回掩码值作为参数 6 中的编码值,以便密钥定位操作可以继续使用掩码值。 在这种情况下,密钥定位操作可能成功也可能不成功。 例如, RPG SETLL 请求可能成功。 但是, RPG chain 操作可能会失败,并产生 "找不到记录" 错误。
- sqlfpNoMask -对于屏蔽数据的字段过程,它指示调用者是要求对数据进行解码而不进行屏蔽的系统函数。 例如,在某些情况下, RGZPFM 和 ALTER TABLE 可能需要复制数据。 如果字段过程在执行这些操作时忽略此参数并屏蔽数据,那么列数据将丢失。 因此,屏蔽数据的字段过程正确处理此参数至关重要。
在 QSYSINC/H 中包含 SQLFP 描述了这些参数。