VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

句柄资源管理接口

DCI句柄资源管理包括DCI句柄管理和DCI描述符管理。

DCI句柄是DCI 库分配的指向存储区域的不透明指针,存储着许多与DCI编程相关的信息,且句柄类型多样,不同句柄存储不同的信息,比如说环境句柄存储着初始的上下文信息,连接句柄存储着数据库连接信息,描述句柄存储着数据信息,错误句柄存储着错误信息等等。

DCI句柄资源管理

DCI句柄资源管理主要包括句柄的分配初始化、句柄属性的获取、句柄的释放,本节主要介绍DCI当中句柄的分配初始化接口和释放功能接口,句柄分配功能是通过DCIHanleAlloc函数实现的,句柄释放则是通过DCIHandleFree函数实现的。

DCI句柄的分类和介绍如下所示:

句柄类型 功能 句柄类型常量描述 是否支持
环境句柄 环境句柄定义了在其中调用所有 DCI 函数的上下文。 DCI_HTYPE_ENV 支持
错误句柄 错误句柄维护有关 DCI 操作期间发生的错误的信息。如果调用中发生错误,则可以将错误句柄传递给,以获取有关所发生错误的其它信息。 DCI_HTYPE_ERROR 支持
服务上下文句柄 服务上下文句柄定义确定 DCI 调用服务器的操作上下文的属性。服务上下文句柄包含三个句柄作为其属性,分别为服务器句柄(DCI_HTYPE_SERVER)、用户会话句柄(DCI_HTYPE_SESSION)和事务句柄(DCI_HTYPE_TRANS)。 DCI_HTYPE_SVCCTX 支持
语句句柄 语句句柄定义确定了SQL或者PL/SQL相关属性,其中包括了定义句柄(DCI_HTYPE_DEFINE)和绑定句柄(DCI_HYTYPE_BIND)。定义句柄存储着SQL、PL/SQL信息,绑定句柄存储着输入输出绑定的变量信息。 DCI_HTYPE_STMT 支持
描述句柄 描述句柄存储着有关数据库中的架构对象(例如,函数或过程)的信息。 DCI_HTYPE_DESCRIBE 不支持
复杂对象检索句柄 复杂对象检索 (COR) 句柄包含 COR 描述符,提供检索另一个对象引用的对象的说明。 DCI_HTYPE_COMPLEXOBJECT 不支持
订阅句柄 订阅句柄封装了与来自客户端的注册相关的所有信息。 DCI_HTYPE_SUBSCRIPTION 不支持
直接路径句柄 直接路径句柄被直接路径加载接口调用,直接路径加载接口使应用程序能够访问 Oracle 数据库的直接块格式化程序。直接路径接口句柄包含着三个子句柄:直接路径列数组句柄(DCI_HTYPE_DIRPATH_COLUMN_ARRAY)、直接路径函数上下文句柄(DCI_HTYPE_DIRPATH_FN_CTX)、直接路径流句柄(DCI_HTYPE_DIRPATH_STREAM)。 DCI_HTYPE_DIRPATH_CTX 不支持
连接池句柄 连接池句柄用于通过调用特定 DCI 函数将物理连接池化为虚拟连接的应用程序。 DCI_HTYPE_CPOOL 不支持

DCI描述符管理

DCI描述符(有时又叫定位器)是不透明的数据结构,用于维护特定类型数据的信息。比如说用于指示LOB大对象位置的LOB和BFILE定位器、用于存储数据库快照信息的快照描述符等。

DCI描述符管理主要包括描述符的分配和释放,本节主要介绍DCI当中描述符的分配功能接口和释放功能接口,描述符分配功能是通过DCIDescriptorAlloc函数实现的,描述符释放则是通过DCIDescriptorFree函数实现的。

DCI描述符的分类和介绍如下所示:

描述符类型 功能 描述符类型常量 是否支持
快照描述符 快照描述符指示正在对表示特定时间数据库状态的数据库快照执行查询 DCI_DTYPE_SNAP 不支持
LOB数据类型定位器 大型对象 (LOB) 是一种 Oracle 数据类型,可以保存二进制大对象 (BLOB) 或字符大对象 (CLOB) 数据,LOB定位器用作指向实际 LOB 值的指针。 DCI_DTYPE_LOB 支持
参数描述符 DCI 应用程序使用参数描述符来获取有关选择列表列或架构对象的信息 DCI_DTYPE_PARAM 支持
ROWID描述符 rowid是数据的详细地址,利用rowid可以帮助oracle快速定位某行数据的具体位置。ROWID存储着ROWID结构的相关信息。 DCI_DTYPE_ROWID 不支持
日期描述符 日期描述符存储着与日期相关的信息。 DCI_DTYPE_TIME 支持
时间戳描述符 时间戳描述符存储着与时间戳相关的信息。 DCI_DTYPE_TIMESTAMP 支持
时间间隔描述符 时间间隔描述符存储着与时间间隔相关的信息,该描述符有两种类型,一种描述年份月份间隔信息、另一种描述具体天数直到秒数的间隔信息。 DCI_DTYPE_INTERVAL_YM
DCI_DTYPE_INTERVAL_DS 不支持
复杂对象描述符 复杂对象描述符存储着复杂对象的相关信息,提高处理复杂对象程序的效率。 DCI_DTYPE_COMPLEXOBJECTCOMP 不支持
高级排队描述符 数据库高级队列描述符可用于维护特定数据的信息,与Oracle消息队列相关。 DCI_DTYPE_COMPLEXOBJECTCOMP 不支持

DCIHandleAlloc

功能描述

该调用用于分配和初始化用户指定类型的句柄。

功能说明

该调用返回指向已分配和初始化的句柄的指针,该句柄对应于用户指定的类型,所有分配的句柄都是基于传入的环境句柄分配的。调用成功时返回DCI_SUCCESS,错误时返回DCI_INVALID_HANDLE,出现错误时没有诊断程序可用。

接口信息

函数/过程

DCIHandleAlloc语法如下:

sword DCIHandleAlloc (
    const void    *parenth,
    void         **hndlpp, 
    ub4            type, 
    size_t         xtramem_sz,
    void         **usrmempp 
);

参数解释如下:

  • parenth(IN):环境句柄。

  • Handlpp(OUT):返回的句柄指针。

  • type(IN):待初始化的句柄类型

  • xtramemsz (IN):指定在分配和初始化句柄期间分配的用户内存量。

  • usrmempp (OUT):返回一个指针,该指针指向xtramemsz大小的用户内存。

外部接口

无。

其它说明

无。

DCIHandleFree

功能描述

释放用户指定的句柄指向的资源。

功能说明

该调用释放指定句柄指向的存储资源,句柄的类型由输入参数type决定。成功返回DCI_SUCCESS,失败返回DCI_INVALID_HANDLE或者DCI_ERROR。调用该函数会显式释放所有类型的句柄,当父句柄被释放之后子句柄也随之释放。当语句句柄被释放,相应的游标只是会断开与该句柄的连接,该游标可能会推迟到下一次连接断开才被关闭。

接口信息

函数/过程

DCIHandleFree语法如下:

sword DCIHandleFree ( 
    DCIEnv    *hndlp,
    ub4        type
    )

具体参数解释如下:

  • hndlp:指向待释放的句柄。

  • type:句柄类型。

外部接口

无。

其它说明

无。

DCIDescriptorAlloc

功能描述

分配和初始化DCI描述符或者LOB定位器。

功能说明

该调用返回指向DCI描述符或者LOB定位器的指针,类型由用户输入的type参数决定。函数调用成功返回值为DCI_SUCESS,当发生内存不足错误时返回DCI_INVALID_HANDLE。

接口信息

函数/过程

DCIDescriptorAlloc语法如下:

sword DCIDescriptorAlloc (
    const void    *parenth,
    void         **descpp, 
    ub4            type,
    size_t         xtramem_sz,
    void         **usrmempp
);

参数类型解析:

  • parenth(IN):环境句柄。

  • descpp(OUT):返回的描述符指针。

  • type(IN):待初始化的描述类型。

  • xtramemsz (IN):指定在分配和初始化描述符期间分配的用户内存量。

  • usrmempp (OUT):返回一个指针,该指针指向xtramemsz大小的用户内存。

外部接口

无。

其它说明

无。

DCIDescriptorFree

功能描述

释放已经分配的描述符。

功能说明

释放已经分配的描述符,调用成功返回DCI_SUCCESS,调用失败返回DCI_INVALID_HANDLE。所有描述符都会被显式地释放,当环境句柄被释放时也会默认自动释放掉相关的DCI描述符。如果释放的是LOB定位器,需要提前调用DCILobFreeTemporary()接口将临时LOB释放,然后才能调用DCIDescriptor()接口释放该LOB定位器。

接口信息

函数/过程

DCIDescriptorFree语法如下:

sword DCIDescriptorFree ( 
    DCIEnv    *descp,
    ub4        type
    )

具体参数解释如下:

  • descp:指向待释放的描述符。

  • type:句柄类型。

外部接口

无。

其它说明

无。

DCIDescribeAny

功能描述

描述现有的schema和subschema对象。

功能说明

描述现有的schema和subschema对象。

接口信息

函数/过程

DCIDescriptorFree语法如下:

sword DCIDescribeAny ( DCISvcCtx       *svchp,
            DCIError        *errhp,
            void            *objptr,
            ub4              objptr_len,
            ub1              objptr_typ,
            ub1              info_level,
            ub1              objtyp,
            DCIDescribe     *dschp );

具体参数解释如下:

  • Svchp(IN):服务上下文句柄。

  • Errhp(IN/OUT):当发生错误时,可以传递给 DCIErrorGet()用于诊断信息的错误句柄。

  • Objptr(IN):这个参数可以是:

    1、一个字符串,包含要描述的对象的名称。必须使用以前调用 DCIEnvNlsCreate()的charset参数指定的编码。

    2、指向指向TDO的REF的指针(用于类型)。

    3、指向TDO(用于类型)的指针。

通过为objecptr_typ传递适当的值来区分这些情况。

在情况1中,包含对象名称的字符串应该采用 name1[格式Name2…][@linkname],例如hr.Employees.employee_id@mydb。数据库链接只允许连接到 Oracle8i 或更高版本的数据库。对象名称由以下SQL规则解释:

  • 如果只输入name1并且objectyp等于DCI_PTYPE_SCHEMA,则名称引用已命名的模式。Oracle数据库必须是8.1或更高版本。

  • 如果只输入name1并且objectyp等于DCI_PTYPE_DATABASE,那么该名称将引用已命名的数据库。当使用Database_name@db_link_name描述远程数据库时,远程Oracle Database必须在8.1或更高版本中发布。

  • 如果只输入了name1,而objectyp不等于DCI_PTYPE_SCHEMA或DCI_PTYPE_DATABASE,那么这个名称将引用当前用户的当前模式中的已命名对象(类型为table、view、process、function、package、type、synonym、order)。当连接到Oracle7服务器时,唯一有效的类型是过程和函数。

  • 如果输入name1.name2.name3… ,则对象名称引用名为 name1的模式中的模式或子模式对象。例如,在字符串 hr.loyees.department_id 中,hr是模式的名称,employee是模式中表的名称,department _ id是表中列的名称。

  • objnm_len:Objecptr指向的名称字符串的长度。如果传递名称,则必须为非零。如果objecptr是指向TDO或其REF的指针,则可以为零。

  • objptr_typ:在objecptr中传递的对象类型。有效值如下:

    • 如果objecptr指向架构对象的名称,则为DCI_OTYPE_NAME(目前只支持此类型);

    • 如果objecptr是指向指向TDO的REF的指针,则为DCI_OTYPE_REF;

    • 如果objecptr是指向TDO的指针,则为DCI_OTYPE_PTR;

  • info_level:为将来的扩展保留。传递DCI_DEFAULT。

  • objtyp:所描述的架构对象的类型。有效值如下:

参数描述符标识 说明 是否支持
DCI_PTYPE_TABLE table
DCI_PTYPE_VIEW view
DCI_PTYPE_PROC procedure
DCI_PTYPE_FUNC function
DCI_PTYPE_PKG package
DCI_PTYPE_TYPE type, including a package type
DCI_PTYPE_TYPE_ATTR attribute of a type, including package record type attributes
DCI_PTYPE_TYPE_COLL collection type information, including package collection elements
DCI_PTYPE_TYPE_METHOD method of a type
DCI_PTYPE_SYN synonym
DCI_PTYPE_SEQ sequence
DCI_PTYPE_COL column of a table or view
DCI_PTYPE_ARG argument of a function or procedure
DCI_PTYPE_TYPE_ARG argument of a type method
DCI_PTYPE_TYPE_RESULT results of a method
DCI_PTYPE_LIST column list for tables and views, argument list for functions and procedures, or subprogram list for packages
DCI_PTYPE_SCHEMA schema
DCI_PTYPE_DATABASE database
DCI_PTYPE_UNK unknown schema object
DCI_PTYPE_COLL lists the attributes when a parameter is for a collection type
DCI_PTYPE_RULE lists the attributes when a parameter is for a rule
DCI_PTYPE_RULE_SET lists the attributes when a parameter is for a rule set 
DCI_PTYPE_EVALUATION_CONTEXT lists the attributes when a parameter is for an evaluation context
DCI_PTYPE_TABLE_ALIAS lists the attributes when a parameter is for a table alias
DCI_PTYPE_VARIABLE_TYPE lists the attributes when a parameter is for a variable
DCI_PTYPE_NAME_VALUE lists the attributes when a parameter is for a rule set
  • dschp:调用后用有关对象的描述信息填充的描述句柄。必须是非 NULL 的。

外部接口

无。

其它说明

无。