一致性
推出版本:ODBC 1.0 标准合规:ODBC
总结
SQLProcedures 返回存储在特定数据源中的过程名称列表。
过程 是一个通用术语,用来描述可 执行对象或可通过输入和输出参数调用的命名实体。 有关程序的更多信息,请参见 程序。
Syntax
SQLRETURN SQLProcedures(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * ProcName,
SQLSMALLINT NameLength3);
Arguments
StatementHandle
[输入]语句句柄。
CatalogName
[输入]手术目录。 如果驱动程序支持某些表的目录,但不支持其他表,例如当驱动程序从不同的数据库管理系统检索数据时,空字符串(“”)表示那些没有目录的表。
目录名称 不能包含字符串搜索模式。
如果SQL_ATTR_METADATA_ID语句属性设置为SQL_TRUE,目录 名 被视为标识符,其大小写不重要。 如果是SQL_FALSE,目录 名称 是一个普通的论证;它被字面处理,且其案例意义重大。 有关详细信息,请参阅目录函数中的参数。
NameLength1
[输入]*目录名称字符长度。
SchemaName
[输入]过程模式名称的字符串搜索模式。 如果驱动程序支持某些过程的模式,但不支持其他步骤,例如当驱动程序从不同数据库管理系统检索数据时,空字符串(“”)表示那些没有模式的过程。
如果SQL_ATTR_METADATA_ID语句属性设置为 SQL_TRUE,SchemaName 被视为标识符,其大小写不重要。 如果是 SQL_FALSE,SchemaName 是一个模式值参数;它被字面处理,且其案例意义重大。
NameLength2
[输入]*SchemaName字符长度。
ProcName
[输入]程序名称的字符串搜索模式。
如果SQL_ATTR_METADATA_ID语句属性设置为 SQL_TRUE,ProcName 被视为标识符,其大小写不重要。 如果是 SQL_FALSE,ProcName 是一个模式值参数;它被字面处理,且其案例意义重大。
NameLength3
[输入]*ProcName字符长度。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。
Diagnostics
当 SQLProcedures 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值,HandleType 为 SQL_HANDLE_STMT,Handle 为 StatementHandle 。 下表列出 了SQLProcedures 通常返回的SQLSTATE值,并在此函数的上下文中对每个值进行了解释;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | 常规警告 | 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| 08S01 | 通信链接失败 | 驱动程序与驱动程序连接到的数据源之间的通信链接在函数完成处理之前失败。 |
| 24000 | 游标状态无效 |
StatementHandle 上打开了一个光标,调用了 SQLFetch 或 SQLFetchScroll。 如果 SQLFetch 或 SQLFetchScroll 未返回SQL_NO_DATA,并且如果 SQLFetch 或 SQLFetchScroll 返回SQL_NO_DATA,驱动程序将返回此错误。 StatementHandle 上开着光标,但未调用 SQLFetch 或 SQLFetchScroll。 |
| 40001 | 序列化失败 | 由于资源死锁与另一个事务,事务已回滚。 |
| 40003 | 语句完成未知 | 执行此函数期间关联的连接失败,无法确定事务的状态。 |
| HY000 | 常规错误 | 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。 |
| HY001 | 内存分配错误 | 驱动程序无法分配支持执行或完成函数所需的内存。 |
| HY008 | 操作已取消 | 为 StatementHandle 启用了异步处理。 调用了该函数,在完成执行之前,对 StatementHandle 调用了 SQLCancel 或 SQLCancelHandle。 然后,在 StatementHandle 上再次调用该函数。 调用了函数,在完成执行之前,SQLCancel 或 SQLCancelHandle 从多线程应用程序中的不同线程调用 StatementHandle。 |
| HY009 | 无效使用 null 指针 | SQL_ATTR_METADATA_ID语句属性被设置为 SQL_TRUE,CatalogName 参数是空指针,SQL_CATALOG_NAME InfoType 返回支持目录名称。 (DM) SQL_ATTR_METADATA_ID语句属性被设置为 SQL_TRUE,SchemaName 或 ProcName 参数是空指针。 |
| HY010 | 函数序列错误 | (DM) 为与 StatementHandle 关联的连接句柄调用异步执行函数。 当调用该函数时,该异步函数仍在执行中。 (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect 或 SQLMoreResults,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。 (DM) 为 StatementHandle 调用异步执行函数(而不是此函数),并在调用此函数时仍在执行。 (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect、SQLBulkOperations 或 SQLSetPos,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。 |
| HY013 | 内存管理错误 | 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。 |
| HY090 | 字符串或缓冲区长度无效 | (DM) 其中一个名称长度参数的值小于0但不等于SQL_NTS。 名称长度参数之一的值超过了相应名称的最大长度值。 |
| HY117 | 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 | (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数。 |
| HYC00 | 未实现可选功能 | 指定了程序目录,驱动程序或数据源不支持目录。 指定了过程模式,驱动程序或数据源不支持模式。 过程模式或过程名称指定了字符串搜索模式,但数据源不支持对其中一个或多个参数的搜索模式。 驱动程序或数据源不支持SQL_ATTR_CONCURRENCY和SQL_ATTR_CURSOR_TYPE语句属性的当前设置的组合。 SQL_ATTR_USE_BOOKMARKS语句属性设置为SQL_UB_VARIABLE,SQL_ATTR_CURSOR_TYPE语句属性设置为驱动程序不支持书签的游标类型。 |
| HYT00 | 已超时 | 在数据源返回请求的结果集之前,查询超时期限已过期。 超时期限通过 SQLSetStmtAttr 设置,SQL_ATTR_QUERY_TIMEOUT。 |
| HYT01 | 超过连接超时时间 | 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。 |
| IM001 | 驱动程序不支持此函数 | (DM) 与 语句句柄 关联的驱动程序不支持此功能。 |
| IM017 | 在异步通知模式下禁用轮询 | 每当使用通知模型时,轮询将被禁用。 |
| IM018 | 尚未调用 SQLCompleteAsync 来完成此句柄上的上一个异步操作。 | 如果句柄上的上一个函数调用返回SQL_STILL_EXECUTING并且启用通知模式, 则必须在句柄上调用 SQLCompleteAsync 才能执行后期处理并完成操作。 |
注释
SQLProcedures 列出了请求范围内的所有过程。 用户可能有或没有执行这些程序的权限。 为了检查无障碍,应用程序可以调用 SQLGetInfo 并检查SQL_ACCESSIBLE_PROCEDURES信息值。 否则,应用程序必须能够处理用户选择无法执行的过程的情况。 有关如何使用这些信息的信息,请参见 程序。
Note
有关 ODBC 目录函数的常规用途、参数和返回数据的详细信息,请参阅 目录函数。
SQLProcedures 以标准结果集的形式返回,按PROCEDURE_CAT、PROCEDURE_SCHEMA和PROCEDURE_NAME排序。
Note
SQLProcedures 可能不会返回所有过程。 应用程序可以使用任何有效的过程,无论该过程是否由 SQLProcedures 返回。
以下列已更名为ODBC 3*.x*。 列名的更改不会影响向后兼容,因为应用程序按列号绑定。
| ODBC 2.0 列 | ODBC 3*.x* 列 |
|---|---|
| PROCEDURE_QUALIFIER | PROCEDURE_CAT |
| PROCEDURE _OWNER | PROCEDURE _SCHEM |
为了确定PROCEDURE_CAT、PROCEDURE_SCHEM和PROCEDURE_NAME列的实际长度,应用程序可以调用带有SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN和SQL_MAX_PROCEDURE_NAME_LEN选项的 SQLGetInfo 。
下表列出了结果集中的列。 驱动可以定义第8列(PROCEDURE_TYPE)之外的其他列。 应用程序应通过从结果集末尾倒计时来访问驱动程序特定的列,而不是指定明确的序数位置。 有关详细信息,请参阅 目录函数返回的数据。
| 列名称 | 列号 | 数据类型 | 注释 |
|---|---|---|---|
| PROCEDURE_CAT(ODBC 2.0) | 1 | Varchar | 程序目录标识符;如果不适用于数据源,则使用NULL。 如果驱动程序支持某些过程的目录,而对其他程序不支持,例如当驱动程序从不同的数据库管理系统检索数据时,对于没有目录的过程,驱动程序会返回一个空字符串(“”)。 |
| PROCEDURE_SCHEM(ODBC 2.0) | 2 | Varchar | 过程模式标识符;如果不适用于数据源,则使用NULL。 如果驱动程序支持某些过程的模式,而不支持其他步骤,例如当驱动程序从不同数据库管理系统检索数据时,对于没有模式的过程,它会返回一个空字符串(“”)。 |
| PROCEDURE_NAME(ODBC 2.0) | 3 | Varchar 非 NULL | 程序标识符。 |
| NUM_INPUT_PARAMS(ODBC 2.0) | 4 | N/A | 保留以供将来使用。 申请不应依赖这些结果栏中返回的数据。 |
| NUM_OUTPUT_PARAMS(ODBC 2.0) | 5 | N/A | 保留以供将来使用。 申请不应依赖这些结果栏中返回的数据。 |
| NUM_RESULT_SETS(ODBC 2.0) | 6 | N/A | 保留以供将来使用。 申请不应依赖这些结果栏中返回的数据。 |
| 备注(ODBC 2.0) | 7 | Varchar | 手术过程的描述。 |
| PROCEDURE_TYPE(ODBC 2.0) | 8 | Smallint | 定义了程序类型: SQL_PT_UNKNOWN:无法确定过程是否返回某个值。 SQL_PT_PROCEDURE:返回对象是一个过程;也就是说,它没有返回值。 SQL_PT_FUNCTION:返回对象是一个函数;也就是说,它有返回值。 |
SchemaName 和 ProcName 参数接受搜索模式。 有关有效搜索模式的更多信息,请参见 模式值参数。
代码示例
参见 程序呼叫。
相关函数
| 有关信息 | 请参阅 |
|---|---|
| 将缓冲区绑定到结果集中的列 | SQLBindCol 函数 |
| 取消语句处理 | SQLCancel 函数 |
| 仅向前取一行或数据块 | SQLFetch 函数 |
| 提取数据块或滚动结果集 | SQLFetchScroll 函数 |
| 返回驱动程序或数据源的信息 | SQLGetInfo 函数 |
| 返回过程的参数和结果集列 | SQLProcedureColumns 函数 |
| 调用存储过程的语法 | 执行语句 |