`
www-hello
  • 浏览: 99043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Pro*C SQLDA 结构体

阅读更多


--摘自 《Oracle Pro*C 程序开发》     --Create/Modify Email:xingchengli@gmail.com

SQLDA 的结构如下:
struct SQLDA
{
long N; /* Descriptor size in number of entries */
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 */
};
SQLDA结构成员作用描述:
名称 描述
N SELECT-LIST列或占位符的最大数量,执行DESCRIBE前必须执行
SQLSQLDAAlloc()函数给N进行赋值,设定描述数组的维数,其决定了描述字结构成
员数组的最大元素个数。在DESCRIBE命令后,必须将存储在F中的变量真实个数赋
值给N。
V 是一个指向一个地址数组的指针,在该数组中存储SELECT-LIST列值或绑定变
量的值。当使用SQLSQLDAAlloc函数时,系统给V[0]到V[n-]赋值为0。在使用select
descriptors时,必须在FETCH语句前,给V指针数组分配内存空间,应为下列语句要
用到两种描述字具体的值:
EXEC SQL FETCH ... USING ‘select descriptors’
对于bind descriptors,必须在OPEN语句前分配空间
EXEC SQL OPEN ... USING ‘bind descriptors’
L L是一个指向存放select-list或bind-variable变量值长度数组的指针。对于select
descriptors,DESCRIBE SELECT LIST语句设置数组中各元素的值,对不在select-list
的对应长度设置成该类型的可的定义的最大长度。在FETCH语句前,用户可能需要
重新修改变量长度,比如为了显示原因,需要将NUMBER类型数据存储到C语言char[]
类型,就需要通过SQLNumberPrecV6()函数得到NUMBER长度,然后转换成字符串
后的真实长度。
对于bind descriptors,用户必须在OPEN语句前,给数组成员赋对应V变量成员长
度的值。
因为Oracle间接的通过使用存储在V[i]变量的地址访问数据区域,如果不指定L[i]
变量,就不能得到V[i]的存储数据的长度,也就不能得到或给V[i]指定的数据区域赋
值。如果用户需要更改V[i]指定数据区域的长度,只需要简单更改L[i]的值即可。
T T时指向一个数组的指针,在这个数组中存放这select-list或者bind-variable的数据
类型。这个成员决定了Oracle数据存储到V数组中时如何进行转换。
对于select descriptors,DESCRIBE SELECT LIST语句设置数据类型数组值为
Oracle内部数据类型(char ,number或date等)。在进行FETCH前,用户可能需要重新
根改此数组某元素的值,因为Oracle内部数据类型很难被C语言所采用。通常为了对
select-list对应的select descriptors数据进行显示,需要将数据类型转换成varchar2或
STRING类型。T[i]的高位用来指示其对应的select-list列值的“NULL/NOT NULL”状
态。在使用OPEN或FETCH语句前,需要调用SQLColumnNullCheck()接受T[i]数据类
型值,并清空高位NULL/NOT NULL状态。
对于bind descriptors,DESCRIBE BIND VARIABLES设置数据类型数组的各元素
值为0。用户必须在OPEN命令前设置各输入宿主变量的数据类型。变量类型值采用
Oracle外部数据类型描述。通常,绑定变量值存储在字符串数组中,其对应的T[i]就
设置为1(Varchar2)或者5(STRING)。
I 这是一个指向存储指示变量值数组的指针。
对于select descriptors,在FETCH语句前必须设置I数组各元素所指向的地址。
EXEC SQL FETCH ... USING ‘select descriptor’
如果第i个select-list对应列值为空,则I[i]值为-1 否则是个>=0的整数。
对于bind descriptors,必须在OPEN语句前设置I数组各变量的值。
EXEC SQL OPEN ... USING ‘bind descriptor’
F 存放通过DESCRIBE语句得到的select-list或占位符的真实数目,如果经过
DESCRIBE语句后F小于零表示DESCRIBE语句发现的select-list数目或占位符数目比
分配描述符时指定的最大数据数目N大,例如,如果设置N=10但DESCRIBE发现
select-list的数目是11个,那么F将被设置成-11,这允许用户根据此值重新调用
SQLSQLDAAlloc函数分配大的描述符存储区域。
S 指向一个数组的指针,该数组存储了select-list或占位符的名字。
M 指向一个数组的指针,该数组存储了select-list或占位符名字的最大长度。
C 指向一个数组的指针,该数组存储了select-list或占位符名字的当前长度。
X 指向一个存储指示变量名字数组的指针。
Y 指向一个存储指示变量名字最大长度数组的指针。
Z 指向一个存储指示变量名称当前长度数组的指针。

分享到:
评论

相关推荐

    INFORMIX_ORALCE_SQLDA

    描述INFORMIX和ORALCE数据库的SQLDA结构,INFORMIX向ORALCE移值有关SQLDA的程度经典之作。

    25.使用SQLDA的动态SQL.doc

    25.使用SQLDA的动态SQL

    Informix ESQLC 中文完整版 pdf格式

    Informix ESQLC 开发中文完整版包含以下章节: 1.INFORMIX产品介绍 2.INFORMIX-ESQL/C介绍 3.数据库stores5 4.在INFORMIX-ESQL/C中嵌入 SQL语句 5.编译INFORMIX-ESQL/C程序 ...25.使用SQLDA的动态SQL

    ESQLC资料(完全版)

    第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言96 5.4.1 SQLDA97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言105 6.1 一个嵌入SQL语言的简单...

    嵌入式SQL(E-SQL)简介

    6.3.1 声明嵌入SQL语句中使用的C变量 112 6.3.2 连接数据库 115 6.3.3 数据的查询和修改 115 6.3.4 游标的使用 116 6.3.5 SQLCA 117 6.3.6 WHENEVER 118 6.4动态SQL语句 119 6.4 .1 动态修改 119 6.4.2 动态游标 120...

    嵌入SQL资料

    6.3.1 声明嵌入SQL语句中使用的C变量112 6.3.2 连接数据库115 6.3.3 数据的查询和修改115 6.3.4 游标的使用116 6.3.5 SQLCA117 6.3.6 WHENEVER118 6.4动态SQL语句119 6.4 .1 动态修改119 6.4.2 动态游标120...

    数据库嵌入式SQL介绍与应用

    6.3.1 声明嵌入SQL语句中使用的C变量 112 6.3.2 连接数据库 115 6.3.3 数据的查询和修改 115 6.3.4 游标的使用 116 6.3.5 SQLCA 117 6.3.6 WHENEVER 118 6.4动态SQL语句 119 6.4 .1 动态修改 119 6.4.2 动态游标 120...

    informix-esql/c

    doc文件格式 本书共25章, 1.INFORMIX产品介绍 2.INFORMIX-ESQL/C介绍 3.数据库stores5 4.在INFORMIX-ESQL/C中嵌入SQL语句 5.编译INFORMIX-ESQL/C程序 6.在INFORMIX-ESQL/C中使用简单变量 ...25.使用SQLDA的动态SQL

    ESQLC资料 informax

    ESQL/C资料(完全版) 1 1.1 第一节 什么是嵌入SQL语言? 3 1.1.1 嵌入SQL程序的组成元素 3 1.1.2 什么是静态SQL和动态SQL? 5 1.1.3 什么是SQLCA? 5 1.1.4 什么是SQLDA? 5 1.2 第二节 SYBASE SQL Server嵌入式SQL语言...

    ESQLC资料 informix (加上星级评论后可以返还11分)

    ESQL/C资料(完全版) 1 1.1 第一节 什么是嵌入SQL语言? 3 1.1.1 嵌入SQL程序的组成元素 3 1.1.2 什么是静态SQL和动态SQL? 5 1.1.3 什么是SQLCA? 5 1.1.4 什么是SQLDA? 5 1.2 第二节 SYBASE SQL Server嵌入式SQL语言...

    用动态SQL方法4连接 Oracle 的实现VC源代码

    动态SQL的第4种方法通过SQLDA(The SQL Descriptor Area)和oracle内部交换数据,可以执行直到程序运行时还不知道选择表项或虚拟输入宿主变量的个数和类型的SQL语句。 关键字:oracle,sql

    战德臣教授数据库系统设计教程视频数据库系统上中下三部

    嵌入式SQL语言之动态SQL>A00-本讲学习什么.mp4A01-动态SQL的概念和作用.mp4A02-动态SQL构造示例之一.mp4A03-动态SQL构造示例之二.mp4A04-动态SQL的两种执行方式.mp4A05-数据字典及其作用.mp4A06-SQLDA与数据字典的...

    vc++数据库开发资源包.rar

    SQLDA.H SQLDB.H SQLDISTX.H SQLDMO.H SQLDMOID.H SQLEXT.H SQLFRONT.H SQLINITX.H SQLMERGX.H SQLNSDEF.H SQLNSX.H SQLOLEDB.H SQLRES.H SQLRES.IDL SQLRESID.H SQLTYPES.H SQLUCODE.H SRV.H ...

    msmmPrj.rar_The Oracle_oracle dynamic sql

    动态SQL的第4种方法通过SQLDA(The SQL Descriptor Area)和oracle内部交换数据,可以执行直到程序运行时还不知道选择表项或虚拟输入宿主变量的个数和类型的SQL语句

    用动态SQL方法4连接 Oracle 的实现.rar_The Oracle

    动态SQL的第4种方法通过SQLDA(The SQL Descriptor Area)和oracle内部交换数据,可以执行直到程序运行时还不知道选择表项或虚拟输入宿主变量的个数和类型的SQL语句。 原作者:wujinglong

    SQL2000开发工具包

    │ SQLDA.H │ SQLDB.H │ SQLDISTX.H │ SQLDMO.H │ SQLDMOID.H │ SQLEXT.H │ SQLFRONT.H │ SQLINITX.H │ SQLMERGX.H │ SQLNSDEF.H │ SQLNSX.H │ SQLOLEDB.H │ SQLRES.H │ SQLRES.IDL │ SQLRESID.H │ ...

    用动态SQL方法4连接Oracle的实现

    用动态SQL方法4连接 Oracle 的实现 ...动态SQL的第4种方法通过SQLDA(The SQL Descriptor Area)和oracle内部交换数据,可以执行直到程序运行时还不知道选择表项或虚拟输入宿主变量的个数和类型的SQL语句。

    DB2错误信息SQLCODE SQLSTATE.txt

    +236 01005 SQLDA中的SQLN的值至少应于所描述的列的个数一样大 +237 01594 至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR条目需要另外的空间 +238 01005 至少应有一个被描述的列是一个LOB,因此扩展的...

    C#使用SqlDataAdapter对象获取数据的方法

    本文实例讲述了C#使用SqlDataAdapter对象获取数据的方法。分享给大家供大家参考,具体如下: 一.SqlDataAdapter对象 1. SqlDataAdapter特性 SqlDataAdapter类用作ADO.NET对象模型中和...即如果调用Fill方法时,SqlDa

    在线网络考试系统1.2源码

    数据库附加后要设置web.config、SQLDA/SqlHelper.cs中的数据库连接信息并编译后生效 ------------------------------------------------------ 首页登录地址是login.aspx -----------------------------------------...

Global site tag (gtag.js) - Google Analytics