描述数据获取¶
ACI可以获得指定表、视图以及查询结果对应列的描述信息,包括字段名称、类型、长度、精度等信息。
查询的描述数据获取¶
对于查询语句,如果能获得描述数据信息,就可以通过获得的类型来进行空间分配和自动define绑定的能力。ACI提供两种获得查询语句元数据(描述)新的能力:
- 隐式描述
当查询语句执行完成后,列的描述信息存储在语句句柄中,为了获取多个选择列表项的信息,可以调用带有位置参数的 ACIParamGet 函数,第一次将参数设置为1,然后在重复的 ACIParamGet 函数调用时对该参数进行迭代,直到ACI_ERROR错误返回。也可将位置参数设置为任意合适的数以随机获取列信息。
在参数描述符被绑定到参数列表中的相关位置后,可以通过 ACIAttrGet 函数获取描述符的数据类型以及参数的最大长度等信息。
由于选择列表项信息在语句被执行后在客户端已经获取,因此 ACIAttrGet 和 ACIParamGet 都是本地调用,并不需要网络上的来回相应。
示例如下:
/*
本例中的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_ATTR_LINK¶
- 类型: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
- 描述:如果参数是字符串或字符类型,则返回字符集形式