SQLProcedure-获取过程名称列表
SQLProcedures() 返回已在系统上注册并与指定搜索模式匹配的过程名称的列表。
将在 SQL 结果集中返回此信息,可以使用用于处理查询生成的结果集的相同函数来检索此信息。
Unicode (UTF-16) 等效: 此函数还可以与 Unicode (UTF-16) 字符集配合使用。 相应的 Unicode 函数是 SQLProceduresW() 。有关 DB2® CLI 的 Unicode 支持的更多信息,请参阅 Db2 for i CLI 中的 Unicode 。
语法
SQLRETURN SQLProcedures (SQLHSTMT StatementHandle,
SQLCHAR *CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR *SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR *ProcName,
SQLSMALLINT NameLength3); 函数自变量
| 数据类型 | 自变量 | 使用 | 描述 |
|---|---|---|---|
| SQLHSTMT | StatementHandle | 输入 | 语句句柄。 |
| SQLCHAR * | CatalogName | 输入 | 3 部件过程名称的目录限定符。 这必须是 NULL 指针或零长度字符串。 |
| SQLSMALLINT | NameLength1 | 输入 | CatalogName的长度。 此值必须设置为 0。 |
| SQLCHAR * | SchemaName | 输入 | 可能包含 pattern-value 以按模式名称限定结果集的缓冲区。 对于 DB2 for z/OS® 和 OS/390® V 4.1,所有存储过程都在一个模式中; SchemaName 自变量的唯一可接受值是空指针。 对于 DB2, SchemaName 可以包含有效的模式值。 |
| SQLSMALLINT | NameLength2 | 输入 | SchemaName的长度。 |
| SQLCHAR * | ProcName | 输入 | 可能包含 pattern-value 以限定 procedure 名称的结果集的缓冲区。 |
| SQLSMALLINT | NameLength3 | 输入 | ProcName的长度。 |
用法
SQLProcedures() 返回的结果集包含按给定顺序列示在 表 2 中的列。 这些行按 PROCEDURE_CAT , PROCEDURE_SCHEMA 和 PROCEDURE_NAME 进行排序。
因为在许多情况下,对 SQLProcedures() 的调用会映射到针对系统目录的复杂且昂贵的查询,所以请谨慎使用这些查询,并保存结果,而不是重复调用。
虽然可能会添加新列,并且在将来的发行版中可能会更改现有列的名称,但当前列的位置不会更改。
| 列号/名称 | 数据类型 | 描述 |
|---|---|---|
| 1 进程 DURE_CAT | VARCHAR(128) | 当前服务器。 |
| 2 进程 SCHEM | VARCHAR(128) | 包含 PROCEDURE_NAME 的模式的名称。 |
| 3 进程名称 | VARCHAR(128) NOT NULL | 过程的名称。 |
| 4 输入参数数 | INTEGER NOT NULL | 输入参数的数目。 |
| 5 输出参数数 | INTEGER NOT NULL | 输出参数的数目。 |
| 6 结果集数 | INTEGER NOT NULL | 过程返回的结果集数。 |
| 7 备注 | VARCHAR (254) | 这包含有关该过程的描述性信息。 |
| 8 进程类型 | SMALLINT | 定义过程类型:
|
注: Db2 for i CLI 使用的列名遵循 X/Open CLI CAE 规范样式。 列类型,内容和顺序与为 ODBC中的
SQLProcedures() 结果集定义的列类型,内容和顺序相同。 |
||
返回码
- SQL_SUCCESS
- sql_success_with_info
- SQL_ERROR
- sql_invalid_handle
错误状态
| SQLSTATE | 描述 | 说明 |
|---|---|---|
| 24000 | 游标状态无效 | 已在语句句柄上打开游标。 |
| 40003 08S01 | 通信链路故障 | 在功能完成之前,应用程序与数据源之间的通信链路发生故障。 |
| HY001 | 内存分配失败 | Db2 for i CLI 无法分配支持处理或完成功能所需的内存。 |
| HY008 | 操作已取消 | |
| HY010 | 函数顺序错误 | |
| HY014 | 没有更多句柄 | 由于内部资源, Db2 for i CLI 无法分配句柄。 |
| HY021 | 内部描述符无效 | 无法寻址或分配内部描述符,或者它包含无效的值。 |
| HY090 | 无效的字符串或缓冲区长度 | 其中一个名称长度参数的值小于 0 ,但不等于 SQL_NTS。 |
| HYC00 | 驱动程序不支持 | Db2 for i CLI 不支持 catalog 作为过程名称的限定符。 连接的数据源不支持将模式作为过程名称的限定符。 |
| HYT00 | 超时已到期 |
限制
如果应用程序连接到不提供对存储过程目录的支持或不提供对存储过程的支持的 DB2 服务器,那么 SQLProcedureColumns() 将返回空结果集。
示例
注: 通过使用代码示例,您同意 代码许可证和免责声明信息的条款。
/* From CLI sample procs.c */
/* ... */
printf("Enter Procedure Schema Name Search Pattern:\n");
gets((char *)proc_schem.s);
rc = SQLProcedures(hstmt, NULL, 0, proc_schem.s, SQL_NTS, (SQLCHAR *)"%", SQL_NTS);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 2, SQL_C_CHAR, (SQLPOINTER) proc_schem.s, 129,
&proc_schem.ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 3, SQL_C_CHAR, (SQLPOINTER) proc_name.s, 129,
&proc_name.ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 7, SQL_C_CHAR, (SQLPOINTER) remarks.s, 255,
&remarks.ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf("PROCEDURE SCHEMA PROCEDURE NAME \n");
printf("------------------------- ------------------------- \n");
/* Fetch each row, and display */
while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS) {
printf("%-25s %-25s\n", proc_schem.s, proc_name.s);
if (remarks.ind != SQL_NULL_DATA) {
printf(" (Remarks) %s\n", remarks.s);
}
} /* endwhile */