SQLProcedures 函数
一致性
引入的版本:ODBC 1.0 标准符合性:ODBC
摘要
SQLProcedures 返回存储在特定数据源中的过程名称的列表。 过程 是一个通用术语,用于描述 可执行对象,或者可以使用输入和输出参数调用的命名实体。 有关过程的详细信息,请参阅 过程。
语法
SQLRETURN SQLProcedures(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * ProcName,
SQLSMALLINT NameLength3);
自变量
StatementHandle
[输入]语句句柄。
CatalogName
[输入]过程目录。 如果驱动程序支持某些表的目录,但不支持其他表的目录,例如当驱动程序从不同的 DBMS 检索数据时,空字符串 (“”) 表示那些没有目录的表。 CatalogName 不能包含字符串搜索模式。
如果 SQL_ATTR_METADATA_ID 语句属性设置为 SQL_TRUE, 则 CatalogName 被视为标识符,其大小写不重要。 如果它是SQL_FALSE, 则 CatalogName 是一个普通参数;它按字面处理,其大小写很重要。 有关详细信息,请参阅 目录函数中的参数。
NameLength1
[输入]*CatalogName 的长度(以字符为单位)。
SchemaName
[输入]过程架构名称的字符串搜索模式。 如果驱动程序支持某些过程的架构,但不支持其他过程(例如,当驱动程序从不同的 DBMS 检索数据时),则空字符串 (“”) 表示没有架构的过程。
如果将 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 的长度(以字符为单位)。
返回
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。
诊断
当 SQLProcedures 返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,可以通过调用 SQLGetDiagRec 来获取关联的 SQLSTATE 值,该 SQLGetDiagRec 的 HandleType 为 SQL_HANDLE_STMT, 句柄 为 StatementHandle。 下表列出了 SQLProcedures 通常返回的 SQLSTATE 值,并说明了此函数上下文中的每个值;表示法“ (DM) ”位于驱动程序管理器返回的 SQLSTATEs 说明之前。 与每个 SQLSTATE 值关联的返回代码SQL_ERROR,除非另有说明。
SQLSTATE | 错误 | 描述 |
---|---|---|
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) SQLExecute、 SQLExecDirect 或 SQLMoreResults 已为 StatementHandle 调用并返回SQL_PARAM_DATA_AVAILABLE。 此函数是在检索所有流式处理参数的数据之前调用的。 (DM) 为 StatementHandle 调用了异步执行的函数 (不是此函数) ,并且调用此函数时仍在执行。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations 或 SQLSetPos 已为 StatementHandle 调用并返回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) 与 StatementHandle 关联的驱动程序不支持此函数。 |
IM017 | 在异步通知模式下禁用轮询 | 每当使用通知模型时,将禁用轮询。 |
IM018 | 尚未调用 SQLCompleteAsync 来完成此句柄上的上一个异步操作。 | 如果对句柄的上一个函数调用返回SQL_STILL_EXECUTING并且启用了通知模式,则必须在句柄上调用 SQLCompleteAsync 以执行后期处理并完成操作。 |
注释
SQLProcedures 列出请求范围中的所有过程。 用户可能具有执行其中任何过程的权限,也可能没有权限。 若要检查辅助功能,应用程序可以调用 SQLGetInfo 并检查SQL_ACCESSIBLE_PROCEDURES信息值。 否则,应用程序必须能够处理用户选择无法执行的过程的情况。 有关如何使用此信息的信息,请参阅 过程。
注意
有关 ODBC 目录函数的常规用法、参数和返回数据的详细信息,请参阅 目录函数。
SQLProcedures 以标准结果集的形式返回结果,按PROCEDURE_CAT、PROCEDURE_SCHEMA和PROCEDURE_NAME排序。
注意
SQLProcedures 可能不会返回所有过程。 无论它是否由 SQLProcedures 返回,应用程序都可以使用任何有效的过程。
以下列已重命名为 ODBC 3*.x*。 列名更改不会影响向后兼容性,因为应用程序按列号绑定。
ODBC 2.0 列 | ODBC 3*.x* 列 |
---|---|
PROCEDURE_QUALIFIER | PROCEDURE_CAT |
过程_OWNER | 过程_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。 如果驱动程序支持某些过程的目录,但不支持其他过程(例如,当驱动程序从不同的 DBMS 检索数据时),则对于没有目录的过程,它将返回空字符串 (“”) 。 |
PROCEDURE_SCHEM (ODBC 2.0) | 2 | Varchar | 过程架构标识符;如果不适用于数据源,则为 NULL。 如果驱动程序支持某些过程的架构,但不支持其他过程的架构,例如当驱动程序从不同的 DBMS 检索数据时,它将为没有架构的过程返回空字符串 (“”) 。 |
PROCEDURE_NAME (ODBC 2.0) | 3 | Varchar 非 NULL | 过程标识符。 |
NUM_INPUT_PARAMS (ODBC 2.0) | 4 | 空值 | 保留供将来使用。 应用程序不应依赖于这些结果列中返回的数据。 |
NUM_OUTPUT_PARAMS (ODBC 2.0) | 5 | 空值 | 保留供将来使用。 应用程序不应依赖于这些结果列中返回的数据。 |
NUM_RESULT_SETS (ODBC 2.0) | 6 | 空值 | 保留供将来使用。 应用程序不应依赖于这些结果列中返回的数据。 |
备注 (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 Function(SQLFetchScroll 函数) |
返回有关驱动程序或数据源的信息 | SQLGetInfo 函数 |
返回过程的参数和结果集列 | SQLProcedureColumns Function(SQLProcedureColumns 函数) |
用于调用存储过程的语法 | 执行语句 |