`
www-hello
  • 浏览: 100441 次
  • 性别: 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 指向一个存储指示变量名称当前长度数组的指针。

分享到:
评论

相关推荐

    Oracle ProC 编程入门.pdf

    Pro*C是一种将过程化语言C与非过程化语言SQL相结合的开发工具,允许开发者在C语言程序中直接嵌入SQL语句,从而实现对Oracle数据库的高效访问和管理。这种结合不仅提供了强大的过程控制能力,还能进行复杂的数据库...

    Oracle+ProC+编程入门,简单实用

    Oracle Pro*C 编程入门 Oracle Pro*C 编程入门是指使用 Oracle 的 Pro*C 语言来开发数据库应用程序的入门级教程。Pro*C 是 Oracle 公司开发的一种嵌入式 SQL 语言,它允许开发者在 C 语言中嵌入 SQL 语句,从而实现...

    oracle_ProC编程入门

    - **Pro*C 的特点**: - 结合了 C 语言的过程控制能力和 SQL 的数据操作能力。 - 支持动态创建、修改和删除数据库表,以及查询、插入、更新和删除表中的记录。 - 可以嵌入 PL/SQL 块来提高应用程序性能,尤其是在...

    INFORMIX_ORALCE_SQLDA

    ### INFORMIX与ORACLE数据库中的SQLDA结构详解 #### 一、概述 在数据库迁移过程中,特别是将INFORMIX数据库迁移到ORACLE数据库时,理解SQLDA(SQL Descriptor Area)结构至关重要。本文旨在深入探讨INFORMIX和...

    Oracle_ProC编程入门

    **Oracle Pro*C**是一种结合了C语言和SQL的编程方式,主要用于开发Oracle数据库应用程序。它将过程化的C语言与非过程化的SQL语言完美结合,使得开发者既能够利用C语言强大的控制结构,又能够充分发挥SQL语言对数据库...

    嵌入式开发数据库PROC*C

    - **sqlda.h**: 定义SQLDA结构体,用于传递SQL描述信息。 #### 移植注意事项 在将应用程序从其他数据库平台(如Informix)移植到Oracle时,需要注意以下几个方面: - **字符串处理**:在Informix中,字符串使用双...

    oracle的proc学习资料

    10. **Pro*C命令选项**: Pro*C/C++是Oracle提供的预处理器,可以用来处理动态SQL相关的代码。 #### 四、动态SQL实例 在动态SQL中,可以通过具体的实例来更好地理解其应用方法。例如,可以编写一个动态SQL查询语句...

    msmmPrj.rar_The Oracle_oracle dynamic sql

    "msmmPrj.rar_The Oracle_oracle dynamic sql"这个压缩包文件很可能包含了关于使用Oracle动态SQL的详细教程或项目代码,特别是通过SQLDA(SQL Descriptor Area)进行数据交互的方法。 SQLDA,全称为SQL描述符区域,...

    Oracle_Proc教程

    ### Oracle Pro*C 编程教程知识点总结 #### 一、Oracle Pro*C 概述 - **编写目的**:为了帮助公司的员工快速掌握Oracle的嵌入式开发技术——Pro*C,以便于他们能够有效地进行数据库迁移工作,特别是从Informix到...

    ESQLC资料(完全版)

    ### ESQL/C资料(完全版) #### 第一节 什么是嵌入SQL语言? **1.1 嵌入SQL程序的组成元素** 嵌入式SQL(Embedded SQL, ESQL)是一种将SQL语句直接嵌入到高级编程语言(如C语言)中的方法,允许开发者直接在应用...

    PROC批量导入导出ORACLE数据库表.docx

    - **SQLDA结构**:SQLDA(SQL Data Area)结构体用于描述SQL语句的输入/输出参数,包括字段数量、字段名称和数据类型等信息。在源代码中,`SelectUnit`和`BindUnit`分别用于描述查询结果和绑定输入数据。 3. **...

    嵌入式SQL简介嵌入式SQL简介.doc

    嵌入式SQL(E-SQL)是将SQL语句直接嵌入到主语言(如C、COBOL或FORTRAN)程序中,使得应用程序能够直接与数据库进行交互的一种技术。这种方式使得程序员可以在常规编程逻辑中无缝地执行数据库操作,提高了程序的灵活...

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

    ESQL/C是ESQL的一个特定实现,用于C语言环境。 1. **嵌入SQL语言的组成元素** - **SQL声明**:这是嵌入到宿主语言程序中的SQL语句,如SELECT、INSERT、UPDATE、DELETE等。 - **预编译器**:预编译器负责处理嵌入...

    嵌入式SQL语言

    嵌入式SQL(Embedded SQL)是一种将SQL语句直接嵌入到宿主编程语言(如C语言)中的技术。这种方法结合了SQL的非过程化特性和宿主语言的过程化特性,允许程序员在保持程序逻辑清晰的同时,有效地与数据库进行交互。 ...

    嵌入式SQL(E-SQL)简介.doc

    嵌入式SQL,简称E-SQL,是一种将SQL(Structured Query Language,结构化查询语言)语句直接嵌入到宿主语言(如C、COBOL或Java)程序中的编程方式。这种方式允许程序员在常规的应用程序逻辑中无缝地执行数据库操作,...

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

    嵌入式SQL(E-SQL)是将SQL语句直接嵌入到宿主语言(如C,COBOL,FORTRAN等)程序中的一种技术,它使得程序员可以在编写应用程序时直接处理数据库,而不必通过单独的数据库接口。这种集成使得程序更加灵活,能够更...

    DM7_PROC使用手册

    **DM7_PROC使用手册**是针对达梦数据库管理系统(DM)中对于PRO*C支持的一个详细介绍。本手册旨在帮助开发人员、测试工程师、技术支持人员及数据库管理员更好地理解和使用DM中的PRO*C特性。手册覆盖了嵌入式SQL语法、...

Global site tag (gtag.js) - Google Analytics