数据访问服务调用层接口规范
1.范围
本文件定义了一组数据访问应用程序接口(API),提供了通用编程语言以编程方式访问关系数据库的能力。使用数据访问应用程序接口(API),应用程序能够执行SQL语句,返回结果集,将改变传回底层的数据源。数据访问应用程序接口还可以和位于分布式异构的环境中的多个数据源中进行交互。
2. 规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注明日期的引用文件,仅注明日期的版本适用于本文件。凡是未注明日期的引用文件,仅最新版本(包括所有的修改单)适用于本文件。
[ISO1539] ISO/IEC 1539-1:1997, Information technology —Programming languages —Fortran — Part 1:Base language.
ISO/IEC 1539-1:1997/Cor.1:2001.
ISO/IEC 1539-1:1997/Cor.2:2002.
[ISO1989] ISO 1989:1985, Programming languages —COBOL. (Endorsement of ANSI X3.23-1985).
ISO/IEC 1989:1985/Amd.1:1992, Intrinsic function module
ISO/IEC 1989:1985/Amd.2:1994, Correction and clarification amendment for COBOL
[ISO6160] ISO 6160:1979, Programming languages —PL/I. (Endorsement of ANSI X3.53-1976).
[ISO7185] ISO/IEC 7185:1990, Information technology —Programming languages —Pascal.
[ISO8652] ISO/IEC 8652:1995, Information technology — Programming languages — Ada.
ISO/IEC 8652:1995/Cor.1:2001.
[Framework] ISO/IEC FCD 9075-1:2003, Information technology — Database languages —SQL — Part 1:Framework (SQL/Framework).
[Foundation] ISO/IEC FCD 9075-2:2003, Information technology — Database languages —SQL — Part 2:Foundation (SQL/Foundation).
[Schemata] ISO/IEC FCD 9075-11:2003, Information technology — Database languages —SQL — Part 11:Information and Definition Schemas (SQL/Schemata).
[ISO9899] ISO/IEC 9899:1999, Programming languages — C.
ISO/IEC 9899:1999/Cor 1:2001, Technical Corrigendum to ISO/IEC 9899:1999.
[ISO10206] ISO/IEC 10206:1991, Information technology —Programming languages —Extended Pascal.
[ISO11756] ISO/IEC 11756:1999, Information technology — Programming languages — M.
3. 术语和定义
3.1 定义
下列术语和定义适用于本文件。
3.1.1 数据源data source
SQL服务器(server)的同义词,属于SQL连接的一部分。
3.1.2 句柄handle
当数据访问应用程序被分配了资源,并且通过引用方式应用该资源时,由数据访问服务实现方返回的一个调用层对象。
3.1.3 内表inner table
左外连接符的第二个操作数或者右外连接符的第一个操作数。
3.1.4 伪列pseudo-column
伪列属于表的一部分,但不属于该表描述符的一部分。例如:一个由实现方定义的的行标识符。
3.2 约定
下列约定适用于本文件。
3.2.1 例程定义规格
影视资源站采集api接口数据
在本文件中,例程用如下术语进行说明:
●功能:描述例程的简短语句;
●定义:例程的名字以及每一个参数的名字、模式、及其数据类型;
●通用规则:对例程运行时作用的规格说明。多条通用规则被用来说明例程的作用时,
需要的即为最初读取的作用,所需的效果是,开始使用最初的一般规律和运用数字
序列,直到取得的规则适用于指定或暗指顺次序或终止本规则申请的变更。除非另
外有被一个特定的应用规则确定或暗指,当序列中的最后一个已被应用,一般规律
的应用终止。
4. 数据访问服务调用层接口
4.1 概述
数据访问服务调用层接口是一种执行SQL语句的绑定(binding)方式。本标准为数据访问服务调用层接口例程提供的规格说明包括:
●分配和释放资源;
●控制到SQL服务器的连接;
●用类似于动态SQl的机制执行SQL语句;
●读取诊断信息;
●控制事务的终止;
●读取关于数据访问服务调用层接口实现和SQL实现的信息
句柄是一个调用层接口对象,当为调用层接口分配资源后,句柄返回数据访问服务调用层接口的实现。句柄被数据访问服务调用层接口程序用来引用调用层接口的资源。AllocHandle例程用来分配资源,管理SQL环境,SQL连接,调用层接口描述符区域和SQL 实现的处理等;当被引用时,它返回一个环境句柄,一个连接句柄,一个操作符句柄,一个描述句柄。在已分配资源的SQL环境的上下文中,为SQL连接分配资源。而调用层接口描述符区域和SQL语句的资源,则在已分配资源的SQL连接的上下文中进行分配。FreeHandle 例程解除指定的资源。AllocConnect, AllocEnv和AllocStmt例程可以用来分配资源去分别管理SQL连接,SQL环境和SQL语句处理,而不使用AllocHandle例程。FreeConnect, FreeEnv,和FreeStmt例程可以代替FreeHandl例程去释放特定的资源。
每个已分配的SQL环境都有一个属性,用于判断被数据访问服务调用层接口的实现所终止的输出字符串是否为空。数据访问服务调用层接口的应用程序可以通过使用例程SetEnvAttr设置属性值,和通过使用GetEnvAttr恢复当前的属性值。
连接例程(Connect routine)建立了一个SQL连接,并使之成为当前的SQL连接。断开连接例程(Disconnect routine)终止已经建立的SQL连接。已建立的SQL 连接之间的切换是自动进行的。每当数据访问服务调用层接口程序切换到一个休眠的SQL 连接,则该连接将成为当前SQL 的连接。
ExecDirect例程用于SQL 语句的一次性执行。Prepare例程使用Execute例程为后续SQL 语句的执行做好准备。在所有的这三种情况下,已经执行的SQL语句可以包含动态的参数。
调用层接口描述符区域是由动态参数描述、动态参数值,<;动态选择语句>(<dynamic select statement>)或<;动态单行选择语句>(<dynamic single row select statement>)的结果列及这些结果列的目标规范构成的一个接口。通过使用SetStmtAttr例程,数据访问服务调用层接口程序可以分配额外的调用层接口操作符区域,并使用它们作为动态参数值描述和目标规范描述的接口。通过使用GetStmtAttr例程,数据访问服务调用层接口程序可以确定当前用于一个指定接口的调用层接口描述区域的句柄值。GetDescField和GetDescRec例程可以从调用层接口描述符区域中读取信息。CopyDesc例程可以将一个调用层接口描述符区域的内容拷贝到另外的调用层接口描述符区域。
当一个<;动态选择语句>或<;动态单行选择语句>准备好或立即执行时,结果列的描述可以在可应用的调用层接口实现描述符区域中自动加以提供。在这种情况下,通过使用Descriptor 或ColAttribute例程,数据访问服务调用层接口程序可以额外的读取一个单结果列的描述信息,而使用NumResultCols
例程,可以额外获得这些结果列的数量值信息。在调用层接口程序的描述符区域中,通过显式的使用SetDescField 和SetDescRec例程,或者隐式地使用BindCol 例程,数据访问服务调用层接口程序可以设定对应的目标规范描述的数值。
当SQL语句准备好执行或者立即执行时,动态参数的描述可以通过可应用的调用层接口实现描述符区域自动提供,前提是当前的SQL连接必须支持该功能。在已被分配资源的SQL连接中有一个专门的属性,用来表明是否支持该功能。该属性的值可以通过GetConnectAttr例程读取。无论SQL连接是否支持自动描述,在SQL语句执行之前,通过显式使用SetDescField和SeDescRec例程,或者隐式的使用BindParameter例程,在程序描述符区域中都可以定义所有的动态输入和输入/输出参数。动态输入和输入/输出参数的值可以在SQL语句执行之前就加以定义,或者在SQl语句执行期间加以提供。在调用层接口描述符区域中,参数描述可以确定那个当前正在使用哪个方法。ParamData例程用来循环处理动态
输入和输入/输出参数的暂缓(deffer value)值。Putdata例程用来提供暂缓值。Putdata例程也可以设置字符串输入和输出参数。
在<;调用语句>准备好或者立即执行之前,数据访问服务调用层接口程序可以选择在调用层接口程序描述符区域中是否绑定动态输出参数。通过显式使用SetDescField和SetDescRec 例程,或者隐式的
使用BindParemeter例程,可以执行该操作。该语句执行后,无边界的输出和输入/输出参数值可以通过GetParamData例程单独读取。GetParamData例程也可以逐个的对输出和输入/输出参数的字符和二进制字符串进行加载。
当执行一个<;动态选择语句>或者<;动态单行选择语句>被执行时,游标被隐式的声明并开启。游标名由数据访问服务调用层接口应用通过例程SetCursorName提供。如果SQL/调用层接口应用没有提供游标名,则会生成实现给定的游标名。
Fetch和Fetch Scroll例程用来定位一个开启的游标,并读取该行的绑定列值。绑定列是指以特定调用层接口描述符区域为目标值定义了位置的目标规格的列。Fetch例程总是将在开启的游标定位到下一行,而FetchScroll例程则被用来将已开启的游标定位到任意行。当游标被隐式声明时,CURSORSCROLLABLE语句的属性值为SCROLLABLE,包括FetchScroll的使用,除去NEXT。数据访问服务调用层接口应用可以通过SetStmtAttr例程设定该属性值,并通过GetStmtAttr例程读取该属性的当前值。Fetch和FetchScroll例程同样可以读取单个调用的多个行信息;行的集合因此称为行集。这通过设置应用行描述符的ARRAY_SIZE域为行的所需值的方式实现。注意单个行读取只是多行读取的一种特殊情况,其行集大小为1。
未绑定列的值可以通过使用getData例程分别获得。getData例程使字符值和二进制字符串列的读取可
以逐一完成。通过执行一个<;可预处理的动态删除语句:已定位的>或者一个<;可预处理的动态更新语句:已定位的>,游标的当前行可以被删除或更新。调用CloseCursor例程可以关闭一个游标。
如果为Execute或ExecDirect例程提供当前语句为<;调用语句>的语句句柄,则结果集可以作为调用Execute或ExecDirect例程的结果返回给数据访问服务调用层接口应用程序。这样的结果集可以前面已经描述过的<;动态选择语句>产生的结果集同样的方式进行描述和处理通。一个单独的<;调用语句>的执行可以产生多个结果集。这些结果集可以作为可一次处理一个或并行处理的一组有序结果集被返回。一次处理一个结果集时,一旦完成处理给定的结果集,MoreResults例程就确定是否有额外的结果集,如果有,将游标定位在下一个结果集的首行前面。并行处理结果集时,NextResult例程用来确定是否有额外的结果集,如果有,将游标定位在下一个结果集的首行前面。
通过专用的编目例程(catalog routines)可从信息模式(Information Schema)中返回结果集。这些例程为:
●ColumnPrivileges:返回一个特权列表,该列表在列(column)上执行,并且
其名字和它所请求的样式在单个说明表中相关联。通过使用ExecDirect例程进
行信息模式上COLUMN_PRIVILEGES视图的适当查询,可以获得大部分信息。
●Columns:返回遵循所要求模式的所有列的名称和属性。通过使用ExecDirect例程
进行信息模式上COLUMNS视图的适当查询,可以获得大部分信息。
●ForeignKeys: 返回单个说明表的主键值,该值伴随有引用该主键值的所有其他
表中的外部键值,或者返回单个说明表的外部键值,该值伴随有引用其他外部
键值的所有其他表的主键值和唯一键值或者外键值.通过使用ExecDirect例程进
行信息模式上TABLE_CONSTRAINTS视图和REFERENTIAL_CONSTRAINTS
视图的适当查询,可以获得大部分信息。
●PrimaryKeys:返回一系列构成一个指定表的主键的列。通过使用ExecDirect例
程进行信息模式上TABLE_CONSTRAINTS视图和KEY_COLUMN_USAGE视
图的适当查询,可以获得大部分信息。
●SpecialColumns:返回一系列可以唯一识别在一个指定表内任意行的列。通过使
用ExecDirect例程进行信息模式上COLUMNS视图的适当查询,可以获得大部分
信息。
●Tables:返回遵循所要求模式和类型的表的信息。通过使用ExecDirect例程进行
信息模式上TABLES视图的适当查询,可以获得大部分信息。
●TablePrivileges:返回一系列遵循所要求模式的表的权限。通过使用ExecDirect
例程进行信息模式上TABLE_PRIVILEGES视图的适当查询,可以获得大部分
信息。
这些专门的例程仅仅适用与一小部分可用于信息模式上的元数据。通过执行信息模式上视图的适当查询,可以获得其他的元数据(例如,与引用SQL例程相关的,触发器和用户自定义类型)。
GetPosition例程, GetLength例程和GetSubString例程都可以被其自身的独立语句句
柄所使用,用来访问一个服务器的字符串值,该服务器可以用一个顺序的大对象定位器(Large Object locator)完成如下操作之一:
●GetPosition例程可以用来确定一个给定的子字符串是否在该字符串中存在,如
果存在,可以得到一个整型值,表示给定字符串的首个字符出现的起始位置。
●GetLength例程可以用来读取该字符串的长度值,该值为整型值;
●GetSubString例程可以用来恢复一个字符串,或者在服务器上创建一个新的大
对象定位器(Large Object locator),并返回该类型值;
Error,GetDiagField和GetDiagRec例程读取关于最近使用的在特定资源上的例程的诊断信息. Error例程经常从下一个状态记录中恢复相关信息,然而GetDiagField例程和GetDiagRec例程可以从任何状态记录上读取信息。
可以通过使用RowCount例程或者GetDiagField例程,获得受最后一个执行SQL语句影响的行数。
通过使用EndTran例程可以终止一个SQL事务。每当一个调用层接口例程被调用时,要求一个SQL事务的上下文环境并且没有SQL事务是活动(active)的,同时一个SQL事务被隐式启动。通过使用StartTran例程,可以显式启动一个SQL事务和它的特征集合。
Cancel例程用于取消一个并发执行的数据访问服务调用层接口例程的执行;它也被用于终止延迟的参数值处理和相关SQL语句的执行。
GetFeatureInfo, GetFunctions, GetInfo, GetSessionInfo和GetTypeInfo例程用于读取执行有关的信息。DataSources例程返回标识SQL服务器的名称列表,用于连接数据访问服务调用层接口应用程序,并且返回每个此类SQL服务器的说明。
4.2返回码
一个调用层接口例程的执行会导致一个或更多情况的产生。可以使用由引用调用层接口例程的结果即一个调用层接口功能或者作为调用层接口例程RerurnCode论证的价值表示执行的状况。
下面的列表描述了返回码的值和表示的意义。如果允许有多个返回码,则表中出现靠后的返回码即为返回的那个。
●值为0表示成功(Success),表示该调用层接口例程执行成功。
●值为1表示信息成功(Success with information),表示调用层接口例程执行成