DESCRIBE PROCEDURE 语句
DESCRIBE PROCEDURE语句用于获取存储过程返回的结果集的信息。 信息(例如结果集的数量)被放入描述符中。
调用 DESCRIBE PROCEDURE
此语句只能嵌入在应用程序中。 这是一个无法动态准备的可执行语句。
授权 DESCRIBE PROCEDURE
不需要执行任何操作。
语法 DESCRIBE PROCEDURE
描述 DESCRIBE PROCEDURE
- 过程名 或 宿主变量
- 标识返回一个或多个结果集的存储过程。 当执行DESCRIBE PROCEDURE语句时,存储过程名称必须标识请求者已经使用SQL CALL语句调用的存储过程。 程序名称可以由一个、两个或三个部分组成。 DESCRIBE PROCEDURE语句中的过程名称必须与CALL语句中指定的名称相同。 例如,如果在CALL语句中指定了由两部分组成的存储过程名称,则必须在DESCRIBE PROCEDURE语句中指定由两部分组成的存储过程名称。
如果使用主变量:
- 它必须是一个字符串变量,长度属性不能超过254。
- 其后不能跟指示变量。
- 宿主变量的值取决于数据库服务器。 无论使用何种服务器,规格必须:
- 在宿主变量中左对齐
- 不包含嵌入的空格
- 如果右边的长度小于宿主变量的长度,则用空白填充
例外:
上述语法适用于除REXX之外的所有语言。 对于REXX,语法为DESCRIBE PROCEDURE :hostvar。
- INTO descriptor-name
- 标识 SQL 描述符区域 (SQLDA)。 SQLDA返回的信息描述了存储过程返回的结果集。
分配和初始化 SQLDA 的注意事项与 DESCRIBE TABLE 类似。
有关执行DESCRIBE PROCEDURE语句后SQLDA的内容,请参阅 DESCRIBE PROCEDURE返回的SQLDA内容。
备注 DESCRIBE PROCEDURE
- DESCRIBE PROCEDURE返回的SQLDA内容
执行DESCRIBE PROCEDURE语句后,SQLDA的内容为:
- SQLDAID字段的首5个字节被设置为“SQLPR”。
REXX SQLDA 不包含 SQLDAID。
- SQLDAID字段的第6至第8字节为保留字节。
- SQLD字段设置为结果集总数。 字段中的值为0表示没有结果集。
- 每个结果集对应一个SQLVAR条目。
- 每个SQLVAR条目的SQLDATA字段被设置为与结果集关联的结果集定位符值。
对于REXX SQLDA,SQLLOCATOR被设置为结果集定位符值。
- 每个SQLVAR条目的SQLIND字段被设置为结果集中的估计行数
对于REXX SQLDA,SQLIND字段不用于DESCRIBE。
- SQLNAME字段设置为存储过程用于返回结果集的游标的名称。 此值以包含此语句的计划或包的编码绑定选项指定的编码方案返回。
SQLIND字段中的 -1 值表示未提供结果集中的估计行数。 Db2 for z/OS® 总是将SQLIND设置为。 -1 对于REXX SQLDA,SQLIND字段不用于DESCRIBE。
DESCRIBE PROCEDURE不返回存储过程所需的参数信息。
- SQLDAID字段的首5个字节被设置为“SQLPR”。
- 定位值分配
定位器值按照关联游标在运行时打开的顺序分配给SQLDA中的SQLVAR条目。 当控制权返回调用应用程序时,不向关闭的游标提供定位器值。 如果光标被关闭,然后在返回调用应用程序之前重新打开,则将使用光标最近执行的 OPEN CURSOR 语句来确定为过程结果集返回定位器值的顺序。 例如,假设程序 P1 打开三个游标A、B、C,关闭游标B,然后在返回调用应用程序之前为游标B发出另一个OPEN CURSOR语句。 定位器的数值按A、C、B的顺序分配。
或者,可以使用关联定位器语句将定位器值复制到结果集定位器变量中。
- 使用宿主变量:
如果描述过程语句包含宿主变量,则宿主变量的内容将采用绑定包含该语句的程序包或计划时在编码参数中指定的编码方案。
例子 DESCRIBE PROCEDURE
以下示例中的语句假定是在PL/I程序中。
EXEC SQL CONNECT TO SITE2;
EXEC SQL CALL P1;
EXEC SQL DESCRIBE PROCEDURE P1 INTO :SQLDA1; EXEC SQL CONNECT TO SITE2;
EXEC SQL CALL MYSCHEMA.P1;
EXEC SQL DESCRIBE PROCEDURE MYSCHEMA.P1 INTO :SQLDA1; EXEC SQL CALL SITE2.MYSCHEMA.P1;
EXEC SQL DESCRIBE PROCEDURE :HV1 INTO :SQLDA2; EXEC SQL CONNECT TO SITE2;
EXEC SQL CALL SITE2.MYSCHEMA.P1;
EXEC SQL ASSOCIATE LOCATORS (:LOC1, :LOC2)
WITH PROCEDURE :HV1;