CN100432999C - Oracle下利用表结构体对整记录进行数据存取的方法 - Google Patents
Oracle下利用表结构体对整记录进行数据存取的方法 Download PDFInfo
- Publication number
- CN100432999C CN100432999C CNB200510026498XA CN200510026498A CN100432999C CN 100432999 C CN100432999 C CN 100432999C CN B200510026498X A CNB200510026498X A CN B200510026498XA CN 200510026498 A CN200510026498 A CN 200510026498A CN 100432999 C CN100432999 C CN 100432999C
- Authority
- CN
- China
- Prior art keywords
- oracle
- data
- record
- tpmom01
- list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明提供ORACLE下利用表结构体对整记录进行数据存取的方法,它针对ORACLE数据表的记录内的各字段,构造相应的宿主语言结构体,结构体内各成员变量对应表结构中的各字段的值;通过修改所述宿主语言结构体的值,完成对ORACLE数据表结构整条记录的数据存取。采用本发明技术方案,可避免程序中对ORACLE内相应数据字段的冗长定义和SQL语句的繁琐书写,屏蔽ORACLE的字段数据交换。若配合上TUXEDO的三层数据类交换技术,更可大大提升程序员的工作效率,降低其工作难度。
Description
技术领域
本发明涉及一种在ORACLE编程环境下对整条记录进行数据存取的方法。
背景技术
传统的基于甲骨文公司著名的数据库产品软件--ORACLE的数据交换方法较为死板、繁琐。特别对于整记录的存取,必须对该记录中的每个字段定义变量。结构化查询语言(SQL,Structured Query Language)中还比必须将每个字段一一列出,并对应上相应变量,当字段数较多时,该种方法的编程效率很低。
发明内容
本发明的目的在于提供一种在ORACLE编程环境下,利用表结构体对整条记录进行数据存取的方法,以提高编程效率。
为达上述目的,本发明采用如下技术方案,
针对ORACLE数据表的记录内的各字段,构造相应的宿主语言结构体,结构体内各成员变量对应表结构中的各字段的值;通过修改所述宿主语言结构体的值,完成对ORACLE数据表结构整条记录的数据存取,其中,所述宿主语言结构体中嵌套了用于存取记录值的子结构体,并通过指针进行连接,这样对于宿主语言结构体与子结构体中的任一个修改其值,都会造成另一结构体的同步变化,从而完成在宿主语言中对ORACLE表结构信息的存取。
上述与ORACLE数据表结构相对应的结构体可通过编制的小程序自动生成。
作为本发明技术方案的一种改进,在利用该结构体完成ORACLE的表结构整条记录的数据存取步骤中,配合上BEA公司中间件产品软件--TUXEDO的三层数据类交换技术。
其中,TUXEDO三层数据类交换技术是基于TUXEDO中间件的三层架构软件开发模式中的数据存取方法,通过自定义的数据缓冲类(EIBuffer)和数据传输类(EITranslate)两个类所组成的数据缓冲空间透明地实现原先需要调用多个复杂的系统接口才能完成的数据交互功能。当其用于与数据库交互的环境中,结合上述的结构体更可简单的通过一两条语句即可完成对整表的数据存取。
采用本发明技术方案,可避免程序中对ORACLE内相应数据字段的冗长定义和SQL语句的繁琐书写,屏蔽ORACLE的字段数据交换。若配合上TUXEDO的三层数据类交换技术,更可大大提升程序员的工作效率,降低其工作难度。
以下结合附图及实施例进一步说明本发明。
附图说明
图1为本发明实施例程序完成后结构体逻辑图
具体实施方式
一种ORACLE下利用表结构体对整记录进行数据存取的方法,包括以下步骤:
(1)对应于ORACLE数据表字段的宿主语言结构体;
对应ORACLE数据表的记录内的各字段,构造相应的宿主语言结构体,结构体内各成员变量对应表结构中的各字段的值。对应不同字段类型的成员变量,可赋予不同的初始值。通过SQL语句完成对表中整条记录的一次性存取。
如对于如下ORACLE表结构
字段名 | 中文名 | 数据类型 | 字段长(整数位) | 小数位 | 初始值 |
rec_creator | 记录创建责任者 | char | 8 | 0 | ‘‘ |
rec_revise_time | 记录修改时间 | char | 14 | 0 | ‘‘ |
rec_revisor | 记录修改责任者 | char | 8 | 0 | ‘‘ |
order_no | 合同号 | char | 10 | 0 | ‘‘ |
plan_wt | 计划重量 | DOUBLE | 13 | 6 | 0.0 |
创建结构体(C语言),即图1中所示结构体tpmom01_info,
struct str_tpmom01_beta{
char rec_creator[9]; /*记录创建责任者*/
char rec_revise_time[15]; /*记录修改时间*/
char rec_revisor[9]; /*记录修改责任者*/
char order_no[11]; /*合同号*/
double plan_wt; /*计划重量*/
}TPMOM01;
#define INIT_TPMOM01{″″,″″,″″,″″,0} /*初始化*/
TPMOM01 tpmom01=INIT_TPMOM01;
其中结构体中各成员变量对应表结构中的一个字段,数据类型也相互匹配。该结构体即用于存放整条记录的数据值,并将其初始化
(2)描述表结构信息包括数据类型,值的宿主语言嵌套结构体
对应于ORACLE中的表结构,构造描述表结构信息的宿主语言结构体,其中包含的信息包括:表名,字段数,各字段名,各字段类型,各字段值等。其中该结构体将上面介绍的结构体嵌套在里面,通过该结构体,完成在宿主语言中对ORACLE表结构信息的存取。
针对上例,创建描述表结构信息的宿主语言结构体(C语言),即图1中所示子结构体columns[0]、columns[1]、columns[2]、columns[3]、columns[4];
struct str_tpmom01_info{
char name[40];
int column_sum;
struct str_tpmom01_infos{
char name[40];
char cname[80];
char type;
int len;
int dec;
void*value;
}columns[5];
}TPMOM01_INFO;
将子结构体columns[0]、columns[1]、columns[2]、columns[3]、columns[4]赋上初始值;
TPMOM01_INFO tpmom01_info={
″tpmom01″,
5,
{
{″rec_creator″,″记录创建责任者″,′C′,8,0,tpmom01.rec_creator},
{″rec_revise_time″,″记录修改时间″,′C′,14,0,tpmom01.rec revise_time},
{″rec_revisor″,″记录修改责任者″,′C′,8,0,tpmom01.rec_revisor},
{″order_no″,″合同号″,′C′,10,0,tpmom01.order_no},
{″plan_wt″,″计划重量″,′D′,13,6,&tpmom01.plan_wt}
}
};
该结构中嵌套了用于存取记录值的子结构体,并通过指针进行连接,这样对于两结构体中的任一个修改其值的话,都会造成另一结构体的同步变化。
(3)两结构体合成的宿主语言头文件
针对以上两例,生成宿主语言头文件如下:
EXEC SQL BEGIN DECLARE SECTION;
#ifndef TYPE_TPMOM01_EXIST
typedef struct str_tpmom01{
char rec_creator[9]; /*记录创建责任者*/
char rec_revise_time[15]; /*记录修改时间*/
char rec_revisor[9]; /*记录修改责任者*/
char order_no[11]; /*合同号*/
double plan_wt; /*计划重量*/
}TPMOM01;
#define TYPE_TPMOM01_EXIST1
#endif
#if!(DECLARE_TYPE_ONLY==1)
#define INIT_TPMOM01{\
″″,\
″″,\
″″,\
″″,\
0\
}
TPMOM01 tpmom01=INIT_TPMOM01;
#endif
#ifndef TYPE_TPMOM01_INFO_EXIST
typedef struct str_tpmom01_info{
char name[40];
int column_sum;
struct str_tpmom01_infos{
char name[40];
char cname[80];
char type;
int len;
int dec;
void*value;
}columns[5];
}TPMOM01_INFO;
#define TYPE_TPMOM01_INFO_EXIST1
#endif
#if!(DECLARE_TYPE_ONLY==1)
TPMOM01_BETA_INFO tpmom01_info={
″tpmom01″,//结构体tpmom01
5,
{
{″rec_creator″,″记录创建责任者″,′C′,8,0,tpmom01.rec_creator},
{″rec_revise_time″,″记录修改时间″,′C′,14,0,tpmom01.rec_revise_time},
{″rec_revisor″,″记录修改责任者″,′C′,8,0,tpmom01.rec revisor},
{″order_no″,″合同号″,′C′,10,0,tpmom01.order_no},
{″plan_wt″,″计划重量″,′D′,13,6,&tpmom01.plan_wt}
}
};
#endif
EXEC SQL END DECLARE SECTION;
将该头文件引用在与数据库交互的程序中,可方便的实现对ORACLE数据表的数据存取。(C语言)如:
//Pro*c标准头文件部分
//#include<sqlca.h>
//C的标准头文件部分
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdarg.h>
int f_pmom01_inq()
{//在SQL语句中使用的变量
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
//使用的表结构变量
EXEC SQL INCLUDE tpmom01.h;
//Pro*c标准头文件部分
EXEC SQL include sqlca.h;
EXEC SQL DECLARE tpmom01_q1 CURSOR FOR
SELECT*
FROM PM.TPMOM01
ORDER BY order_no ASC;
EXEC SQL OPEN tpmom01_q1;
for(;;){
EXEC SQL FETCH tpmom01_q1
INTO:tpmom01;
if(sqlca.sqlcode==1403)break;
}
EXEC SQL CLOSE tpmom01_q1;
}
return 0;
}
程序完成后结构体逻辑图如图1所示,其中箭头表示内存中的地址指向。
在利用该结构体完成ORACLE的表结构整条记录的数据存取步骤中,可配合上TUXEDO的三层数据类交换技术。
例如:
//从TPMOM01表中取出符合条件的一条记录,存入结构体tpmom01中,
EXEC SQL SELECT*
INTO:tpmom01
FROM TPMOM01
WHERE SLAB_NO=:slab_no;
//将上述记录中的各字段值包括表结构信息存储入数据缓冲空间中(具体参数省略)。
bcls.SetColVal(1,1,(T_INFO*)&tpmom01_info)。
Claims (3)
1、一种ORACLE下利用表结构体对整记录进行数据存取的方法,包括以下步骤:
针对ORACLE数据表的记录内的各字段,构造相应的宿主语言结构体,结构体内各成员变量对应表结构中的各字段的值;通过修改所述宿主语言结构体的值,完成对ORACLE数据表结构整条记录的数据存取;
所述宿主语言结构体中嵌套了用于存取记录值的子结构体,并通过指针进行连接,这样对于宿主语言结构体与子结构体中的任一个修改其值,都会造成另一结构体的同步变化,从而完成在宿主语言中对ORACLE表结构信息的存取。
2、根据权利要求1所述的ORACLE下利用表结构体对整记录进行数据存取的方法,其特征在于:所述与ORACLE数据表结构相对应的结构体通过编制的小程序自动生成。
3、根据权利要求1所述的ORACLE下利用表结构体对整记录进行数据存取的方法,其特征在于:在利用该结构体完成ORACLE的表结构整条记录的数据存取步骤中,配合上TUXEDO的三层数据类交换技术。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510026498XA CN100432999C (zh) | 2005-06-06 | 2005-06-06 | Oracle下利用表结构体对整记录进行数据存取的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510026498XA CN100432999C (zh) | 2005-06-06 | 2005-06-06 | Oracle下利用表结构体对整记录进行数据存取的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1877567A CN1877567A (zh) | 2006-12-13 |
CN100432999C true CN100432999C (zh) | 2008-11-12 |
Family
ID=37510004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200510026498XA Active CN100432999C (zh) | 2005-06-06 | 2005-06-06 | Oracle下利用表结构体对整记录进行数据存取的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100432999C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455317B (zh) * | 2012-11-22 | 2016-06-08 | 江苏沙钢集团有限公司 | 基于Tuxedo、.net及Oracle三层架构开发平台的优化配置方法 |
CN107862008A (zh) * | 2017-10-27 | 2018-03-30 | 广西小草信息产业有限责任公司 | 一种数据管理系统及方法 |
CN110750585A (zh) * | 2019-10-12 | 2020-02-04 | 南京我爱我家信息科技有限公司 | 一种对数据抽取方法的改进 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1271442A (zh) * | 1997-07-21 | 2000-10-25 | 艾利森电话股份有限公司 | 数据库结构 |
CN1276575A (zh) * | 1999-06-07 | 2000-12-13 | 川铁情报系统株式会社 | 数据库存取系统 |
CN1323424A (zh) * | 1998-10-16 | 2001-11-21 | 联合想象计算机公司 | 通过结构化查询语言输入提供对分层数据存储器的访问的方法和装置 |
-
2005
- 2005-06-06 CN CNB200510026498XA patent/CN100432999C/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1271442A (zh) * | 1997-07-21 | 2000-10-25 | 艾利森电话股份有限公司 | 数据库结构 |
CN1323424A (zh) * | 1998-10-16 | 2001-11-21 | 联合想象计算机公司 | 通过结构化查询语言输入提供对分层数据存储器的访问的方法和装置 |
CN1276575A (zh) * | 1999-06-07 | 2000-12-13 | 川铁情报系统株式会社 | 数据库存取系统 |
Non-Patent Citations (4)
Title |
---|
修复数据库文件的方法. 秦学礼,俞剑.计算机应用,第3期. 1990 |
修复数据库文件的方法. 秦学礼,俞剑.计算机应用,第3期. 1990 * |
用C实现数据库操作. 曾冈泉.吉安师专学报(自然科学),第19卷第6期. 1998 |
用C实现数据库操作. 曾冈泉.吉安师专学报(自然科学),第19卷第6期. 1998 * |
Also Published As
Publication number | Publication date |
---|---|
CN1877567A (zh) | 2006-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210117437A1 (en) | Data model transformation | |
KR100633478B1 (ko) | 비즈니스용 전문 운영체제에 기반하는 소프트웨어개발시스템 및 그 개발방법 | |
CN103049251B (zh) | 一种数据库持久层装置及数据库操作方法 | |
CN102426582B (zh) | 数据操作管理装置和数据操作管理方法 | |
US20160239544A1 (en) | Collaborative planning for accelerating analytic queries | |
Cleve | Program analysis and transformation for data-intensive system evolution | |
WO2020206952A1 (zh) | 一种图数据库的数据导入方法及装置 | |
Salvaneschi et al. | Programming with implicit flows | |
CN105786595B (zh) | 一种两段式提交的事务控制方法 | |
CN100432999C (zh) | Oracle下利用表结构体对整记录进行数据存取的方法 | |
CN101169713A (zh) | 支持转换引擎与映射规则相分离的模型转换框架及其方法 | |
Vakharia et al. | Shared foundations: Modernizing meta’s data lakehouse | |
Liu et al. | Methodical restructuring of complex workflow activities | |
Bruno et al. | Petri-net based simulation of manufacturing cells | |
US10140335B2 (en) | Calculation scenarios with extended semantic nodes | |
AU9010198A (en) | Relational database coexistence in object oriented environments | |
Kolovos et al. | The epsilon pattern language | |
Parsian | JDBC Recipes: A Problem-Solution Approach | |
CN110069243A (zh) | 一种java程序线程优化方法 | |
CN101872358B (zh) | 用于计算机生成兵力仿真系统的数据池及其实现方法 | |
CN110647535B (zh) | 一种将业务数据更新至Hive的方法、终端及存储介质 | |
BOUSETTA et al. | Generating operations specification from domain class diagram using transition state diagram | |
Kiswani et al. | Using metadata in optimizing the design and development of enterprise information systems | |
Aithal et al. | Disconnected Data Access Architecture using ADO. NET Framework | |
Troelsen et al. | Exploring Entity Framework Core |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |