CN100432999C - Oracle下利用表结构体对整记录进行数据存取的方法 - Google Patents

Oracle下利用表结构体对整记录进行数据存取的方法 Download PDF

Info

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
Application number
CNB200510026498XA
Other languages
English (en)
Other versions
CN1877567A (zh
Inventor
胡兵
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Baosight Software Co Ltd
Original Assignee
Shanghai Baosight Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Baosight Software Co Ltd filed Critical Shanghai Baosight Software Co Ltd
Priority to CNB200510026498XA priority Critical patent/CN100432999C/zh
Publication of CN1877567A publication Critical patent/CN1877567A/zh
Application granted granted Critical
Publication of CN100432999C publication Critical patent/CN100432999C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明提供ORACLE下利用表结构体对整记录进行数据存取的方法,它针对ORACLE数据表的记录内的各字段,构造相应的宿主语言结构体,结构体内各成员变量对应表结构中的各字段的值;通过修改所述宿主语言结构体的值,完成对ORACLE数据表结构整条记录的数据存取。采用本发明技术方案,可避免程序中对ORACLE内相应数据字段的冗长定义和SQL语句的繁琐书写,屏蔽ORACLE的字段数据交换。若配合上TUXEDO的三层数据类交换技术,更可大大提升程序员的工作效率,降低其工作难度。

Description

ORACLE下利用表结构体对整记录进行数据存取的方法
技术领域
本发明涉及一种在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的三层数据类交换技术。
CNB200510026498XA 2005-06-06 2005-06-06 Oracle下利用表结构体对整记录进行数据存取的方法 Active CN100432999C (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 联合想象计算机公司 通过结构化查询语言输入提供对分层数据存储器的访问的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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