char **V; /*Ptr to Arr of addresses of main variables */
long *L; /* Ptr to Arr of lengths of buffers */
short *T; /* Ptr to Arr of types of buffers */
short **I; /* Ptr to Arr of addresses of indicator vars */
long F; /* Number of variables found by DESCRIBE */
char **S; /* Ptr to Arr of variable name pointers */
short *M; /* Ptr to Arr of max lengths of var. names */
short *C; /* Ptr to Arr of current lengths of var. names */
char **X; /* Ptr to Arr of ind. var. name pointers */
short *Y; /* Ptr to Arr of max lengths of ind. var. names */
short *Z; /* Ptr to Arr of cur lengths of ind. var. names */
};
其中,上述变量的含义为:
lN:可以容纳的列的最大数目或参数的最大数目 。它对应于DB2的SQLDA的SQLN字段 。
lF:当前SQLDA中的实际列数或参数个数 。它对应于DB2的SQLDA的SQLD字段 。
lT:指明数据类型 。它对应于DB2的SQLVAR结构中的SQLTYPE字段 。lV:指向字符数组 。该字符数组可能是列的数据,或传送参数的数据 。它对应于DB2的SQLVAR结构中的SQLDATA字段 。
lL:给出列或参数值的长度 。它对应于DB2的SQLVAR结构中的SQLLEN字段 。
lI:指向指示符变量,标志数据是否为NULL 。它对应于DB2的SQLVAR结构中的SQLIND字段 。
lS:指向存放列名或参数名的字符数组 。它对应于DB2的SQLVAR结构中的SQLNAME结构的data[] 。
lM:指向一个整数,该整数是S的申请长度 。在DB2中,SQLVAR结构中的SQLNAME结构的data[30]的大小是固定的,即是30 。而ORACLE中是可变的 。其大小为M指向的整数 。
lC:指向一个整数,该整数是S的实际长度 。它对应于DB2的SQLVAR结构中的SQLNAME结构的 length 。
lX:指向一个字符数组 。该字符数组存放了指示符变量的名称,指示符变量表示传递的参数是否为NULL 。DB2中无相应的对应字段 。这个缓冲区仅仅供DESCRIBE BIND LIST语句使用 。
lY:指向一个整数,该整数是X的申请的最大长度 。DB2中无相应的对应字段 。
lZ:指向一个整数,该整数是X的实际长度 。DB2中无相应的对应字段 。
ORACLE的数据类型分成两种情况:内部数据类型和外部数据类型 。ORACLE的内部数据类型是ORACLE在数据库中存放数据的类型,在使用DESCRIBE SELECT LIST命令,就返回内部数据类型代码 。下表是所有的内部数据类型:Oracle 内部数据类型 代码VARCHAR2 1
NUMBER 2
LONG 8
ROWID 11
DATE 12
RAW 23
LONG RAW 24
CHARACTER (or CHAR) 96
MLSLABEL 106外部数据类型是输入宿主变量和输出宿主变量存放数据的类型 。DESCRIBE BIND VARIABLES命令将SQLDA中的数据类型代码置为0 。所以,必须在OPEN语句前设置外部数据类型代码,以告诉ORACLE是什么外部数据类型 。下表是具体的外部数据类型:外部数据类型 代码 C数据类型VARCHAR2 1 char[n]
NUMBER 2 char[n] (n 22)
INTEGER 3 int
FLOAT 4 float
STRING 5 char[n 1]
VARNUM 6 char[n] (n 22)
DECIMAL 7 float
LONG 8 char[n]
VARCHAR 9 char[n 2]
ROWID 11 char[n]
DATE 12 char[n]
VARRAW 15 char[n]
RAW 23 unsigned char[n]
LONG RAW 24 unsigned char[n]
UNSIGNED 68 unsigned int
DISPLAY 91 char[n]
LONG VARCHAR 94 char[n 4]
LONG VARRAW 95 unsigned char[n 4]
CHAR 96 char[n]
CHARF 96 char[n]
CHARZ 97 char[n 1]
MLSLABEL 106 char[n]当ORACLE从用户程序中接收参数值并向用户程序传送查询结果时,就在自己的内部数据格式与它所运行的计算机系统的数据格式之间自动进行数据转换 。DESCRIBE SELECT L IST命令可以返回ORACLE的内部数据类型 。对于字符数据,内部数据类型同外部数据类型是相一致的;而有些内部数据类型对应到外部数据类型后,导致处理复杂化,如:你想将NUMBER数据类型的值处理为C中的FLOAT,那么你可以设置相应的T值为FLOAT(4)和L值为FLOAT的长度 。在FETCH时,ORACLE自动在内部数据类型和外部数据类型之间转换 。在DB2的SQLVAR结构中,列的说明信息、数据等存放在一个单独的sqlvar结构中 。而在ORACLE数据库中,不存在一个单独的结构来说明每列的信息 。而是通过数组的方式实现 。如下图所示,描述了1个输入参数,参数名为bonus 。假设的最大参数个数为3 。
推荐阅读
- kha苹果是什么版本
- 荒野乱斗九游版激活码在哪
- HTC U11国行版系统更新了什么?HTC U11国行版系统更新内容
- 小米MIX2黑色陶瓷版和全陶瓷尊享版哪个好?哪个更划算?
- 增补版 SCO UNIX快速入门
- 小米MIX2黑色陶瓷版上手怎么样?小米黑色陶瓷版多少钱?
- 小米全陶瓷尊享版有哪些颜色?小米全陶瓷尊享版哪个颜色更好看?
- K700新版软件R2AY004试用手记
- 小米Note3吴亦凡限量版什么时候发布?
- ESQL编程使用说明
