描述数据获取

ACI可以获得指定表、视图以及查询结果对应列的描述信息,包括字段名称、类型、长度、精度等信息。

查询的描述数据获取

对于查询语句,如果能获得描述数据信息,就可以通过获得的类型来进行空间分配和自动define绑定的能力。ACI提供两种获得查询语句元数据(描述)新的能力:

  • 隐式描述

当查询语句执行完成后,列的描述信息存储在语句句柄中,为了获取多个选择列表项的信息,可以调用带有位置参数的 ACIParamGet 函数,第一次将参数设置为1,然后在重复的 ACIParamGet 函数调用时对该参数进行迭代,直到ACI_ERROR错误返回。也可将位置参数设置为任意合适的数以随机获取列信息。

在参数描述符被绑定到参数列表中的相关位置后,可以通过 ACIAttrGet 函数获取描述符的数据类型以及参数的最大长度等信息。

由于选择列表项信息在语句被执行后在客户端已经获取,因此 ACIAttrGetACIParamGet 都是本地调用,并不需要网络上的来回相应。

示例如下:

/*
本例中的SQL语句为SELECT语句,假设后台数据库中存在表名为mt_t表
建表语句
create table mt_t(id number(10),col1 number(10));
insert into mt_t values(10,100);
insert into mt_t values(11,1000);
*/
/* 变量定义 */
ACIParam *colhd = NULL;
ACIParam *colhd1 = NULL;

/*----------执行SQL语句-------------*/
r = ACIStmtExecute(m_psvc, m_pstmt, m_perr, 0, 0, 0, 0, ACI_DEFAULT);
r = ACIParamGet(m_pstmt, ACI_HTYPE_STMT, m_perr, (void **)&colhd, 1);
for (int i = 1;; i++)
{
      r = ACIParamGet((void *)colhd, ACI_DTYPE_PARAM, m_perr, (void **)&colhd1, i);
      if (r == ACI_ERROR) break; //需要通过错误来判断是否结束
      /* 获得类型*/
      int type = 0;
      r = ACIAttrGet((void *)colhd1, ACI_DTYPE_PARAM,(void *)&type, (ub4 *)0, ACI_ATTR_DATA_TYPE, m_perr);
      printf("类型:%d \n",type); //值为2,即SQLT_NUM类型
      }
}
  • 显式描述

可以通过指定ACI_DESCRIBE_ONLY为 ACIStmtExecute 函数的模式在语句执行前显式的描述查询,此模式并不执行语句,但是会返回SELECT列表项的描述。为了性能的考虑,神通数据库建议使用隐式描述的方式。

为了最大化提高性能,神通数据库建议通过默认模式并使用隐式描述的方式来执行语句。

正常情况下, ACIStmtExecute 函数的mode参数为ACI_DESCRIBE_ONLY获得描述数据后,还需要再次执行 ACIStmtExecute 函数,且mode参数不能为ACI_DESCRIBE_ONLY,这样才能获得数据。

示例如下

...
int i = 0;
ub4 parmcnt = 0;
ub2 type = 0;
ACIParam *colhd = (ACIParam *) 0;   /* 列参数句柄 */
/* 描述查询列 */
OraText *sqlstmt = (OraText *)"SELECT * FROM employees WHERE employee_id = 100";
checkerr(errhp, ACIStmtPrepare(stmthp, errhp, (OraText *)sqlstmt,
                    (ub4)strlen((char *)sqlstmt),
                    (ub4) ACI_NTV_SYNTAX, (ub4) ACI_DEFAULT));
checkerr(errhp, ACIStmtExecute(svchp, stmthp, errhp, 0, 0,
        (ACISnapshot *)0, (ACISnapshot *)0, ACI_DESCRIBE_ONLY));
/* 从语句句柄中获得参数句柄个数 */
checkerr(errhp, ACIAttrGet((void *)stmthp, ACI_HTYPE_STMT, (void *)&parmcnt, (ub4 *)0, ACI_ATTR_PARAM_COUNT, errhp));
/* 获得各个列的类型等信息,起始位置为1*/
for (i = 1; i <= parmcnt; i++)
{
  checkerr(errhp, ACIParamGet((void *)stmthp, ACI_HTYPE_STMT, errhp,
           (void **)&colhd, i));
  /* 获得类型*/
  type = 0;
  checkerr(errhp, ACIAttrGet((void *)colhd, ACI_DTYPE_PARAM,
          (void *)&type, (ub4 *)0, ACI_ATTR_DATA_TYPE, errhp));
}
...

对象的描述数据获取

通过 ACIDescribeAny 函数可以获得数据库对象的描述信息。比如当应用程序描述一个表时,它便可以检索有关该表列的信息。当前支持对以下对象的描述:

  • 表(ACI_PTYPE_TABLE)
  • 表视图(ACI_PTYPE_VIEW)
  • 同义词(ACI_PTYPE_SYN)
  • 存过程(ACI_PTYPE_PROC)
  • 函数(ACI_PTYPE_FUNC)
  • 包(ACI_PTYPE_PKG)
  • 列(ACI_PTYPE_COL)
  • 参数(ACI_PTYPE_ARG)
  • 自定义类型(ACI_PTYPE_TYPE)

函数 ACIDescribeAny 调用返回的描述句柄具有属性ACI_ATTR_PARAM,它指向这样的描述句柄结构(树结构)。 树的每个节点都具有与该节点关联的属性,以及类似于递归描述句柄并指向包含更多信息的子树的属性。 如果所有属性都是同质的,则将它们称为参数。 与任何节点关联的属性由 ACIAttrGet 返回,而参数由 ACIParamGet 返回。

获取表元数据信息的示例代码如下:

/* 变量定义 */
ACIDescribe *dschp = NULL;
ACIParam   * parmh = NULL;
ACIParam   * collsthd = NULL;
ACIParam   * colhd = NULL;

/* 分配描述句柄 */
ACIHandleAlloc((void *)m_penv, (void **)&dschp, (ub4)ACI_HTYPE_DESCRIBE, (size_t)0, (void **)0);
/* 获取一个表的描述句柄 objptr 为表或视图名*/
if (ACIDescribeAny(m_psvc, m_perr, (void *)objptr, objp_len, ACI_OTYPE_NAME, 0, ACI_PTYPE_TABLE, dschp))
return ACI_ERROR;
/* 从描述句柄中获取参数句柄 */
if (ACIAttrGet((void *)dschp,ACI_HTYPE_DESCRIBE, (void *)&parmh, (ub4 *)0, ACI_ATTR_PARAM, m_perr))
return ACI_ERROR;
/* 在本例中,对象的类型信息ACI_PTYPE_TABLE从ACIAttrGet返回的参数描述符中获取 */
/* 获取表中列的数目 */
int numcols = 0;
if (ACIAttrGet((void *)parmh, ACI_DTYPE_PARAM, (void *)&numcols, (ub4 *)0, ACI_ATTR_NUM_COLS, m_perr))
return ACI_ERROR;
/* 获取表中各列的句柄*/
if (ACIAttrGet((void *)parmh, ACI_DTYPE_PARAM, (void *)&collsthd, (ub4 *)0, ACI_ATTR_LIST_COLUMNS, m_perr))
return ACI_ERROR;
/*通过列清单和检索每一列的数据类型,然后递归描述列类型。*/
for (i = 1; i <= numcols; i++)
{
/* 为第i列获取参数*/
if (ACIParamGet((void *)collsthd, ACI_DTYPE_PARAM, m_perr, (void **)&colhd, (ub4)i))
return ACI_ERROR;
/* 举例获取第i列的数据类型 */
coltyp = 0;
if (ACIAttrGet((void *)colhd, ACI_DTYPE_PARAM, (void *)&coltyp, (ub4*)0, ACI_ATTR_DATA_TYPE, m_perr))
return ACI_ERROR;
col_width = 0;
if (char_semantics)
/* 获取以字符为单位的列宽度*/
ACIAttrGet((void*)colhd, (ub4)ACI_DTYPE_PARAM, (void*)&col_width, (ub4 *)0, (ub4)ACI_ATTR_CHAR_SIZE, m_perr);
else
/* 获取以字节为单位的列宽度 */
ACIAttrGet((void*)colhd, (ub4)ACI_DTYPE_PARAM, (void*)&col_width, (ub4 *)0, (ub4)ACI_ATTR_DATA_SIZE, m_perr);
}
/*释放句柄*/
if (dschp)
ACIHandleFree((void *)dschp, ACI_HTYPE_DESCRIBE);

注解

Oracle在通过 ACIAttrGet 获得字段属性时,可以将ACIParam 句柄类型传入ACI_HTYPE_DESCRIBE (而不是ACI_DTYPE_PARAM),Oracle可以正确获得结果,神通数据库最新版本也进行了兼容,但部分版本不支持。

注解

神通数据库的text、json、xml类型的获取的ACI_ATTR_CHAR_SIZE和ACI_ATTR_DATA_SIZE受配置文件的dbtext_max_len参数影响或者ENV句柄的ACI_ATTR_DB_TEXT_MAX_LEN属性影响,数据库后台支持最大长度为16MB,传入过大的数据会导致报错。

注解

ACIDescribeAny如果objtyp的参数如果为ACI_PTYPE_UNK时,ACI会自动根据对象名称去获取对象所属的类型,然后再进行描述。

参数对象属性

本节介绍了属于不同参数的属性和句柄。

ACIParamGet 返回一个参数。参数可以描述不同类型的对象或信息,并根据其包含的描述类型或特定类型的属性而具有属性。

ACIDescribeAny 调用支持两个以上的名称组件(例如,schema.type.attr1.attr2.method1)。对于多个组件,第一个组件将被解释为架构名称(除非设置了其他标志)。

如果您不知道对象类型是什么,请指定ACI_PTYPE_UNK。否则,如果实际对象类型与指定的类型不匹配,则返回错误。

公共属性

每种参数句柄都有以下属性,但值不一定都有效。

ACI_ATTR_OBJ_ID

  • 类型:ub4
  • 描述:对象或模式的ID

ACI_ATTR_OBJ_NAME

  • 类型:OraText *
  • 描述:对象名称

ACI_ATTR_OBJ_SCHEMA

  • 类型:OraText *
  • 描述:模式名

ACI_ATTR_PTYPE

  • 类型:ub1
  • 描述:参数描述的信息类型。可能的值:
    • ACI_TYPE_TABLE-表
    • ACI_TYPE_VIEW-视图
    • ACI_TYPE_PROC-存储过程
    • ACI_TYPE_FUNC-函数
    • ACI_TYPE_PKG-包装
    • ACI_TYPE_TYPE-类型,包括包类型
    • ACI_TYPE_TYPE_ATTR-类型的属性,包括包记录类型属性
    • ACI_TYPE_TYPE_COLL-集合类型信息,包括包集合元素
    • ACI_TYPE_TYPE_METHOD-类型的方法
    • ACI_TYPE_SYN-同义词
    • ACI_TYPE_SEQ-序列
    • ACI_TYPE_COL-表或视图的列
    • ACI_TYPE_ARG-函数或过程的参数
    • ACI_TYPE_TYPE_ARG-类型方法的参数
    • ACI_TYPE_TYPE_RESULT-方法的结果
    • ACI_TYPE_LIST-表和视图的列列表、函数和过程的参数列表或包的子程序列表
    • ACI_TYPE_SCHEMA-模式
    • ACI_TYPE_DATABASE-数据库
    • ACI_TYPE_UNK-未知对象

ACI_ATTR_TIMESTAMP

  • 类型:ub1*
  • 描述:描述对象的时间戳

表/视图

列出并描述表(ACI_PTYPE_TABLE)或视图(ACI_PTYPE_VIEW)的参数属性。

ACI_ATTR_OBJID

  • 类型:ub4
  • 描述:对象OID

ACI_ATTR_NUM_COLS

  • 类型:ub2
  • 描述:列数量

ACI_ATTR_LIST_COLUMNS

  • 类型:ACIParam *
  • 描述:支持列描述句柄的列表,列表类型为ACI_PTYPE_LIST

ACI_ATTR_REF_TDO

  • 类型:ACIRef *
  • 描述:表中的字段如果是一个REF到类型描述对象(TDO)

ACI_ATTR_IS_TEMPORARY

  • 类型:ub1
  • 描述:是否为临时表

ACI_ATTR_IS_TYPED

  • 类型:ub1
  • 描述:指示表是被类型定义过

ACI_ATTR_DURATION

  • 类型:ACIDuration
  • 描述:临时表的持续时间。值可以是:
    • ACI_DURATION_SESSION-会话
    • ACI_DURATION_TRANS-交易
    • ACI_DURATION_NULL-表不是临时的

当参数用于表或视图的列(ACI_PTYPE_COL)时,列出并描述属性。

ACI_ATTR_CHAR_USED

  • 类型:ub1
  • 描述:返回列的长度语义类型。零(0)表示字节长度语义,1表示字符长度语义。

ACI_ATTR_CHAR_SIZE

  • 类型:ub2
  • 描述:返回列字符长度,即列中允许的字符数。它是ACI_ATTR_DATA_SIZE的对应项,用于获取字节长度。

ACI_ATTR_COLLATION_ID

  • 类型:ub4*
  • 描述:返回列的派生排序规则ID。ACI_ATTR_COLLATION_ID属性仅对基于查询语句句柄的选择列表描述有效,而对ACIDescriptionAny()描述无效。它仅与字符数据类型的选择列表项相关。对于其他数据类型,该值始终为ACI_COLATION_NONE。表7-14描述了一些常用排序规则ID的预定义约束。

ACI_ATTR_COL_PROPERTIES

  • 类型:ub8
  • 描述:返回描述有关某些列属性的数据。

ACI_ATTR_INVISIBLE_COL

  • 类型:ub1
  • 描述:返回列是否不可见。TRUE值表示该列为不可见列。否则,将返回值FALSE。请参阅“描述每一列以了解它是否为不可见列”以获取示例。

ACI_ATTR_DATA_SIZE

  • 类型:ub2
  • 描述:列的最大大小。对于字符串和raw,此长度以字节为单位返回,而不是以字符为单位返回。它为NUMBERs返回22。

ACI_ATTR_DATA_TYPE

  • 类型:ub2
  • 描述:列的数据类型。

ACI_ATTR_NAME

  • 类型:OraText *
  • 描述:指向作为列名的字符串的指针,注意这是一个返回参数,需要传入一个指针的指针。

ACI_ATTR_PRECISION

  • 类型:ub1 或 sb2
  • 描述:数字列的精度。如果精度为非零并且刻度为-127,则它是一个FLOAT;否则,它是一个NUMBER(精度、小数位数)。当精度为0时,NUMBER(精度、小数位数)可以简单地表示为NUMBER。

ACI_ATTR_SCALE

  • 类型:sb1
  • 描述:数字列的比例。如果精度为非零并且刻度为-127,则它是一个FLOAT;否则,它是一个NUMBER(精度、小数位数)。当精度为0时,NUMBER(精度、小数位数)可以简单地表示为NUMBER。

ACI_ATTR_IS_NULL

  • 类型:ub1
  • 描述:如果列不允许使用null值,则返回0。不为CUBE或ROLLUP操作返回正确的值。

ACI_ATTR_TYPE_NAME

  • 类型:OraText *
  • 描述:返回作为类型名称的字符串。如果数据类型为SQLT_NTY或SQLT_REF,则返回的值包含类型名称。如果数据类型为SQLT_NTY,则返回命名数据类型的类型的名称。如果数据类型为SQLT_REF,则返回REF指向的命名数据类型的类型名称。

ACI_ATTR_SCHEMA_NAME

  • 类型:OraText *
  • 描述:返回一个字符串,该字符串包含创建类型时使用的架构名称

ACI_ATTR_REF_TDO

  • 类型:ACIRef*
  • 描述:如果列类型是对象类型,则该类型的TDO的REF

ACI_ATTR_CHARSET_ID

  • 类型:ub2
  • 描述:如果列是字符串或字符类型,则字符集ID

ACI_ATTR_CHARSET_FORM

  • 类型:ub1
  • 描述:如果列是字符串或字符类型,则为字符集形式

存过程/函数/子过程

当参数用于过程(ACI_PTYPE_PROC)或函数(ACI_PTYPE_FUNC)时,列出并描述特定于类型的属性。

ACI_ATTR_LIST_ARGUMENTS

  • 类型:void *
  • 描述:存过程和函数参数对象的列表,参数对象的类型为ACI_PTYPE_ARG,

ACI_ATTR_IS_INVOKER_RIGHTS

  • 类型:ub1
  • 描述:指示过程或函数具有调用程序的权限

ACI_ATTR_NAME

  • OraText *
  • 描述:子过程才有的属性,子过程的名称。

ACI_ATTR_OVERLOAD_ID

  • 类型:ub2
  • 描述:子过程才有的属性,重载ID号(在过程或函数是包的一部分并且重载的情况下相关)。返回的值可能不同于PL/SQL函数或过程的直接查询。

当参数用于包(ACI_PTYPE_PKG)时,列出并描述属性。

ACI_ATTR_LIST_PKG_TYPES

  • 类型:void*
  • 描述:获取ACI_TYPE_PKG包参数句柄中所有类型的列表,列表指向(ACI_PTYPE_TYPE)的参数对象。

ACI_ATTR_LIST_SUBPROGRAMS

  • 类型:void*
  • 描述:获取ACI_TYPE_PKG包参数句柄中所有子过程的列表,子过程可能是函数,也可能是存储过程,因此列表指向(ACI_PTYPE_PROC或ACI_PTYPE_FUNC)的参数对象。

ACI_ATTR_IS_INVOKER_RIGHTS

  • 类型:ub1
  • 描述:指示过程或函数具有调用程序的权限

自定义类型

当参数用于类型(ACI_PTYPE_TYPE)时,列出并描述属性。只有当应用程序在调用ACIEvCreate()时以ACI_OBECT模式初始化ACI进程时,这些属性才有效。

ACI_ATTR_REF_TDO

  • 类型:ACIRef*
  • 描述:如果列类型是对象类型,则返回该类型的类型描述符对象(TDO)的内存中REF。如果没有为ACIRef保留空间,那么它将在缓存中隐式分配。然后,调用者可以使用ACIObjectPin()来固定TDO。

ACI_ATTR_TYPECODE

  • 类型:ACITypeCode
  • 描述:类型代码。请参见数据类型代码。当前只能是ACI_TYPECODE_OBJECT、ACI_TYPECODE_NAMEDCOLLECTION或ACI_TYPECO DE_RECORD。

ACI_ATTR_COLLECTION_TYPECODE

  • 类型:ACITypeCode
  • 描述:如果类型为集合,则为集合的类型代码;否则无效。请参见数据类型代码。当前只能是ACI_TYPECODE_VARRAY、ACI_TYPECODE_TABLE或ACI_TYPECO DE_ITABLE。如果查询此属性以查找不是集合的类型,则会返回错误。

ACI_ATTR_IS_INCOMPLETE_TYPE

  • 类型:ub1
  • 描述:指示这是一个不完整的类型

ACI_ATTR_IS_SYSTEM_TYPE

  • 类型:ub1
  • 描述:指示这是一种系统类型

ACI_ATTR_IS_PREDEFINED_TYPE

  • 类型:ub1
  • 描述:指示这是预定义的类型

ACI_ATTR_IS_TRANSIENT_TYPE

  • 类型:ub1
  • 描述:指示这是一种瞬态类型

ACI_ATTR_IS_SYSTEM_GENERATED_TYPE

  • 类型:ub1
  • 描述:指示这是系统生成的类型

ACI_ATTR_HAS_NESTED_TABLE

  • 类型:ub1
  • 描述:此类型包含嵌套表属性。

ACI_ATTR_HAS_LOB

  • 类型:ub1
  • 描述:此类型包含LOB属性。

ACI_ATTR_HAS_FILE

  • 类型:ub1
  • 描述:此类型包含BFILE属性。

ACI_ATTR_COLLECTION_ELEMENT

  • 类型:void*
  • 描述:集合元素的句柄。请参见集合属性。

ACI_ATTR_NUM_TYPE_ATTRS

  • 类型:ub2
  • 描述:类型属性数

ACI_ATTR_LIST_TYPE_ATTRS

  • 类型:void*
  • 描述:类型属性列表。请参见列出属性。

ACI_ATTR_NUM_TYPE_METHODS

  • 类型:ub2
  • 描述:类型方法的数量

ACI_ATTR_LIST_TYPE_METHODS

  • 类型:void*
  • 描述:类型方法列表。请参见列出属性。

ACI_ATTR_MAP_METHOD

  • 类型:void*
  • 描述:类型为的映射方法。请参见类型方法属性。

ACI_ATTR_ORDER_METHOD

  • 类型:void*
  • 描述:类型为的排序方法。请参见类型方法属性。

ACI_ATTR_IS_INVOKER_RIGHTS

  • 类型:ub1
  • 描述:指示类型具有调用程序的权限

ACI_ATTR_NAME

  • 类型:OraText *
  • 描述:类型的名称

ACI_ATTR_PACKAGE_NAME

  • 类型:OraText *
  • 描述:类型所属包的名称

ACI_ATTR_SCHEMA_NAME

  • 类型:OraText *
  • 描述:类型所属模式的名称

ACI_ATTR_IS_FINAL_TYPE

  • 类型:ub1
  • 描述:指示这是最终类型

ACI_ATTR_IS_INSTANTIABLE_TYPE

  • 类型:ub1
  • 描述:指示这是一个可实例化类型

ACI_ATTR_IS_SUBTYPE

  • 类型:ub1
  • 描述:是否为超级类型

ACI_ATTR_SUPERTYPE_SCHEMA_NAME

  • 类型:OraText *
  • 描述:超级类型的模式名

ACI_ATTR_SUPERTYPE_NAME

  • 类型:OraText *
  • 描述:超级类型的名称

列表

当参数用于列、参数和子程序的列表或包记录类型的字段时(类型ACI_PTYPE_LIST),列出并描述属性。

除了公共属性外,还支持ACI_ATTR_NUM_PARAMS属性。

ACI_ATTR_NUM_PARAMS

  • 类型:ub2
  • 描述:列表中元素的数量。

同义词

当参数用于同义词(ACI_PTYPE_SYN)时,列出并描述属性。

ACI_ATTR_OBJID

  • 类型:ub4
  • 描述:同义词的OID

ACI_ATTR_SCHEMA_NAME

  • 类型:OraText*
  • 描述:包含同义词翻译的架构名称的字符串

ACI_ATTR_NAME

  • 类型:OraText*
  • 描述:以NULL结尾的字符串,包含同义词翻译的对象名

序列

当参数用于序列(ACI_PTYPE_SEQ)时,列出并描述属性。

ACI_ATTR_OBJID

  • 类型:ub4
  • 描述:序列的OID

ACI_ATTR_MIN

  • 类型:ub1
  • 描述:序列的最小值,返回NUMBER格式

ACI_ATTR_MAX

  • 类型:ub1
  • 描述:序列的最大值,返回NUMBER格式

ACI_ATTR_INCR

  • 类型:ub1
  • 描述:序列的增长步长,返回NUMBER格式

ACI_ATTR_CACHE

  • 类型:ub1
  • 描述:缓存的序列号的数量;如果序列不是缓存序列,则为零

ACI_ATTR_ORDER

  • 类型:ub1
  • 描述:序列是否有序

ACI_ATTR_HW_MARK

  • 类型:ub1
  • 描述:高水位线(数字格式)

参数

当参数用于过程或函数的参数时,列出并描述属性。

当参数用于过程或函数的参数(类型为ACI_PTYPE_ARG)、类型方法参数时(类型ACI_PTYPE_TYPE_ARG);方法结果时(类型ACI_PTYPE_TYPE_RESULT)。

ACI_ATTR_NAME

  • 类型:OraText*
  • 描述:返回指向作为参数名称的字符串的指针

ACI_ATTR_POSITION

  • 类型:ub2
  • 描述:参数在参数列表中的位置。总是返回零。

ACI_ATTR_TYPECODE

  • 类型:ACITypeCode
  • 描述:TypeCode

ACI_ATTR_DATA_TYPE

  • 类型:ub2
  • 描述:参数的数据类型。

ACI_ATTR_DATA_SIZE

  • 类型:ub2
  • 描述:参数的数据类型的大小。对于字符串和binary,此长度以字节为单位返回,而不是以字符为单位返回。它为NUMBERs返回22。

ACI_ATTR_PRECISION

  • 类型:ub1 或 sb2
  • 描述:数字参数的精度。如果精度为非零并且刻度为-127,则它是一个FLOAT;否则,它是一个NUMBER(精度、小数位数)。当精度为0时,NUMBER(精度、小数位数)可以简单地表示为NUMBER。

ACI_ATTR_SCALE

  • 类型:sb1
  • 描述:数字参数的小数位数。如果精度为非零并且刻度为-127,则它是一个FLOAT;否则,它是一个NUMBER(精度、小数位数)。当精度为0时,NUMBER(精度、小数位数)可以简单地表示为NUMBER。

ACI_ATTR_LEVEL

  • 类型:ub2
  • 描述:数据类型级别。此属性总是返回零。

ACI_ATTR_HAS_DEFAULT

  • 类型:ub1
  • 描述:指示参数是否具有默认值

ACI_ATTR_LIST_ARGUMENTS

  • 类型:void*
  • 描述:下一级别的参数列表(当参数为记录或表类型时)

ACI_ATTR_IOMODE

  • 类型:ACITypeParamMode
  • 描述:指示参数模式:
  • 0为IN(ACI_TYPEPRAM_IN)
  • 1为OUT(ACI_TYPEPRAM_OUT)
  • 2为输入/输出(ACI_TYPEPRAM_INOUT)

ACI_ATTR_RADIX

  • 类型:ub1
  • 描述:返回基数(如果是数字类型)

ACI_ATTR_IS_NULL

  • 类型:ub1
  • 描述:如果列不允许使用null值,则返回0

ACI_ATTR_TYPE_NAME

  • 类型:OraText*
  • 描述:返回一个字符串,该字符串是包本地类型的类型名称或包名称。如果数据类型为SQLT_NTY或SQLT_REF,则返回的值包含类型名称。如果数据类型为SQLT_NTY,则返回命名数据类型的类型的名称。如果数据类型为SQLT_REF,则返回REF指向的命名数据类型的类型名称。

ACI_ATTR_SCHEMA_NAME

  • 类型:OraText*
  • 描述:对于SQLT_NTY或SQLT_REF,返回一个字符串,其中包含创建类型时使用的架构名称,或为包本地类型创建包时使用的模式名称

ACI_ATTR_SUB_NAME

  • 类型:OraText*
  • 描述:对于SQLT_NTY或SQLT_REF,对于包本地类型,返回具有类型名称的字符串

ACI_ATTR_LINK

  • 类型:OraText*
  • 描述:对于SQLT_NTY或SQLT_REF,返回一个字符串,其中包含类型所在数据库的数据库链接名称。只有当包是远程的时,这种情况才会发生在包本地类型上。

ACI_ATTR_REF_TDO

  • 类型:ACIRef*
  • 描述:如果参数类型是对象,则返回该类型的类型描述符对象(TDO)的REF

ACI_ATTR_CHARSET_ID

  • 类型:ub1
  • 描述:如果参数是字符串或字符类型,则返回字符集ID

ACI_ATTR_CHARSET_FORM

  • 类型:ub1
  • 描述:如果参数是字符串或字符类型,则返回字符集形式