`
kevin.wang
  • 浏览: 251003 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Pro * C 的使用(一)

阅读更多

一 Pro*C 程序概述:
  1.什么是Pro*C程序
      在ORACLE数据库管理和系统中, 有三种访问数据库的方法;
  (1) 用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库;
  (2) 用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
  (3) 利用在第三代语言内嵌入的SQL语言或ORACLE库函数调用来访问。
  Pro*C就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL语言, 利用这些SQL语言可以完成动态地建立、修改和删除数据库中的表,也可以查询、插入、修改和删除数据库表中的行, 还可以实现事务的提交和回滚。
    在Pro*C程序中还可以嵌入PL/SQL块, 以改进应用程序的性能, 特别是在网络环境下,可以减少网络传输和处理的总开销。
   
  2.Pro*C的程序结构图
    通俗来说,Pro*C程序实际是内嵌有SQL语句或PL/SQL块的C程序, 因此它的组成很类似C程序。 但因为它内嵌有SQL语句或PL/SQL块, 所以它还含有与之不同的成份。为了让大家对Pro*C有个感性的认识, 特将二者差别比较如下:

 

二.Pro*C程序的组成结构
  
  每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体
  应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE等语句。
  应用程序的组成结构如图所示:


   
  1. 应用程序首部
  应用程序的首部就是Pro*C的开始部分。它包括以下三部分:
  l C变量描述部分;
  l SQL变量描述部分(DECLARE部分);
  l SQL通信区。
  
  (1) .DECLARE部分(描述部分)
  描述部分说明程序的SQL变量, 定义部分以EXEC SQL BEGIN DECLARE SECTION ;开始和以 EXEC SQL END DECLARE SECTION ;结束的。它可以出现在程序的主部,也可出现在局部
  l SQL变量的说明和使用
  在说明段能为SQL变量指定的数据类型如表所示:
   
   这些数据类型实际上就是C语言的数据类型, 其中VARCHAR中视为C数据类型的扩充。这在以后会谈到。
  SQL变量的使用应注意以下几点:
  l 必须在描述部分明确定义
  l 必须使用与其定义相同的大小写格式
  l 在SQL语句中使用时,必须在其之前加一个“:”(冒号),但在C语句中引用时不需加冒号。
  l 不能是SQL命令中的保留字。
  l 可以带指示变量。
  例如:EXEC SQL BEGIN DECLARE SECTIONS;
      VARCHAR programe[30];
      Int porgsal, pempno;
   EXEC SQL END DECLARE SECTION;
      
   EXEC SQL SELECT ENAME , SAL
   INTO: programe, : progsal
   FROM EMP
   WHERE EMPNO = : pempno;
  
    (2). 指示器变量的说明和引用
  指示变量实际上也是一类SQL变量,它被用来管理与其相关联的宿主变量(即在SQL语句中充 当输入或输出的变量)。每一个宿主变量都可定义一个指示器变量,主要用于处理空值(NULL)
  指示器变量的说明基本同一般SQL变量一样, 但必须定义成2字节的整型,如SHORT、INT。在SQL语句中引用时, 其前也应加“:”(冒号),而且必须附在其相关联的宿主变量之后,在C语句中,可独立使用。当指示器变量为-1时,表示空值。例如:
  EXEC SQL BEGIN DECLARE SECTION ;
   INT dept- number;
   SHORT ind – num;
   CHAR emp –name;
  EXEC SQL END DECLARE SECTION ;
  
  Scanf(“90d %s”, & dept- number , dept – name );
   If (dept – number ==0)
   Ind – num = -1;
   Else 
   Ind – num = 0;
  EXEC SQL INSERT INTO DEPT (DEPTNO, DNAME)
  VALUES(:dept – number : ind- num , :dept – name);
  其中ind – num是dept – number 的指示器变量。当输入的dept – number 值是0时, 则向DEPT 表的DEPTNO列插入空值。
  (3).指针SQL变量的说明和使用
  指针SQL变量在引用前也必须在DECLARE 部分先说明。其说明格式同C语言。在SQL语句中引用时,指针名字前要加前缀“:”(冒号)而不加“*”(星号)。在C语句中用法如同C语言的指针变量。
  (4).数组SQL变更的说明和引用
  在SQL语句中引用数组时,只需写数组名(名字前加冒号), 不需写下标,在C语句中用法如同C语言的数组变量。
  使用数组可大大降低网络传输开销。如要向一表插入100行数据,如果没有数组,就要重复100次, 而引用后,只须执行一次insert语句、便可一次性插入。例如:
    EXEC SQL BEGIN DECLARE SECTION;
     Int emp_number[100];
     Char emp_name[100][15];
     Float salary[100],commission[100];
     Int dept_number;
     EXEC SQL END DECLARE SECTION;
   ….
     EXEC SQL SELECT EMPNO,ENAME,SAL,COMM
      INTO :emp_number,:emp_name,:salary,:commission
     FROM EMP
     WHERE DEPTNO=:dept_number;
   在使用数组时,应注意以下几点;
  l 不支持指针数组
  l 只支持一维数组, 而 emp-name [100][15]视为一维字符串
  l 数组最大维数为32767
  l 在一条SQL语句中引用多个数组时,这些数组维数应相同
  l 在VALUES , SET, INTO 或WHERE子名中, 不允许把简单SQL变量与数组SQL变量混用
  l 不能在DELARE部分初始化数组
  例如:下面的引用是非法的
   EXEC SQL BEGIN DECLARE SECTION;
   Int dept – num [3] = {10,20,30};
   EXEC SQL END DECLARE SECTION ;
   
    EXEC SQL SELECT EMPNO, ENAME , SAL
    INTO : emp – num [ i ], : emp – name [ i ], : salarg [ i ]
    FROM EMP
    (5) 伪类型VARCHAR的说明和引用
    VARCHAR变量在引用之前也必须在说明段说明, 说明时必须指出串的最大        
  长度,如:
       EXEC SQL BEGIN DECLARE SECTION;
        Int book – number;
        VARCHAR  book – name [ 50 ];
       EXEC SQL END DECLARE SECTION ;
   在预编绎时, book – name 被翻译成C语言中的一个结构变量;
     Struct { unsigned short len ;
         Unsigned chart arr [ 20 ] ;
        } boo – name
  由此看出, VARCHAR变量实际上是含长度成员和数组成员的结构变量。在SQL语句中引用时,应引用以冒号为前缀的结构名, 而不加下标,在C语句 中引用结构成员。
  VARCHAR变量在作输出变量时,由ORACLE自动设置, 在作为输入变量时,程序应先把字符串存入数组成员中, 其长度存入长度成员中,然后再在SQL语句中引用。例如:
   Main( )
  { .......
  scanf(“90s, 90d’, book – name .arr, & book – number );
  book – name .len = strlen (book – name .arr);
  EXEC SQL UPDATE BOOK
    SET BNAME = : book – name ;
      BDESC = : book – number ;
   }
  (6) SQL通信区
  SQL 通信区是用下列语句描述的:
  EXEC SQL INCLUDE SQLCA;
  此部分提供了用户运行程序的成败记录和错误处理。
  
   SQLCA的组成
  SQLCA是一个结构类型的变量,它是ORACLE 和应用程序的一个接口。在执行 Pro*C程序时, ORACLE 把每一个嵌入SQL语句执行的状态信息存入SQLCA中, 根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示:
    Struct sqlca
    { char sqlcaid [ 8 ] ;   ----à标识通讯区
     long sqlabc;     ---à 通讯区的长度
     long sqlcode;     ---à保留最近执行的SQL语句的状态码
     struct {  unsigned short sqlerrml;  -----à信息文本长度
    }sqlerrm;
    char sqlerrp [ 8 ];
    long sqlerrd [ 6 ];
    char sqlwarn [ 8 ];
    char sqlext [ 8 ];
    }
    struct sqlca sqlca;
  其中, sqlcode在程序中最常用到,它保留了最近执行的SQL语句的状态码。程序员根据这些状态码做出相应的处理。这些状态码值如下:
   0: 表示该SQL语句被正确执行,没有发生错误和例外。
   >0:ORACLE执行了该语句,但遇到一个例外(如没找到任何数据)。
     <0:表示由于数据库、系统、网络或应用程序的错误,ORACLE未执行该SQL语句。 
   当出现此类错误时,当前事务一般应回滚。

分享到:
评论

相关推荐

    Oracle Pro*C 编程入门.pdf

    1. Pro*C简介:Pro*C是一种将SQL语句嵌入C程序中的开发工具,它允许开发者在C语言中直接使用SQL语句访问Oracle数据库。它是一种第三代语言嵌入式SQL工具,可以在Oracle数据库管理系统中使用。Pro*C程序可以执行...

    pro*c sample

    Pro*C是Oracle公司开发的一种预编译器,它允许程序员在C语言中嵌入PL/SQL代码,使得C程序可以直接与Oracle数据库交互。通过Pro*C,开发者可以利用C语言的强大功能和效率,同时享受Oracle数据库提供的高级数据库操作...

    pro*c学习资料

    PRO*C是一种用于将SQL语句嵌入到C语言程序中的预编译接口。通过这种方式,开发者可以利用C语言的强大功能来处理复杂的逻辑,并同时利用SQL来进行高效的数据管理和操作。本文将详细介绍PRO*C的基本概念、程序结构、...

    Pro*c编程电子图书

    Pro*C,全称为Oracle Precompiling C,是Oracle公司推出的一种混合C语言和SQL的编程工具,它允许开发人员在C程序中直接嵌入SQL语句,以提高数据库应用的性能和效率。这种技术特别适用于需要高效访问Oracle数据库的...

    linux下c/c++连oracle数据库技术pro*c

    Pro*C是Oracle公司提供的一种预编译器,它允许C或C++程序直接调用PL/SQL代码,极大地简化了数据库操作。本篇文章将详细探讨Linux下使用C/C++和Pro*C连接Oracle数据库的技术细节。 1. **Pro*C介绍**: Pro*C是...

    Pro*C/C++ 编程

    Pro*C/C++ 是一种集成在C或C++编程语言中的预处理器,它允许程序员直接在源代码中嵌入PL/SQL语句,用于与Oracle数据库进行交互。这种编程方式提供了高效且灵活的数据库访问手段,特别适合于开发与Oracle数据库紧密...

    PRO*C入门实例

    在IT领域,PRO*C是Oracle公司提供的一种预编译器,它允许开发人员使用C语言来编写PL/SQL代码,从而更高效地与Oracle数据库进行交互。这个“PRO*C入门实例”可能是针对初学者的一个教程,通过一个实际的代码示例来...

    《精通Oracle 10g Pro*C/C++编程》源代码与学习笔记

    《精通Oracle 10g Pro*C/C++编程》是一本专为数据库开发人员设计的教程,作者王海亮和张立民通过这本书深入探讨了如何使用C或C++语言与Oracle 10g数据库进行高效交互。源代码与学习笔记的提供,为读者提供了实践操作...

    java 调 pro*c

    Pro*C是Oracle提供的一种工具,它允许开发人员使用C语言来编写存储过程、函数和其他数据库访问代码,并且能够直接与Oracle数据库API交互。本文将详细介绍如何在Java中调用Pro*C编译的程序,并探讨相关的知识点。 ...

    oracle培训pro*c

    Oracle Pro*C 是一种集成的开发工具,用于在C语言中嵌入SQL语句,以便高效地与Oracle数据库进行交互。这种技术将C语言的强大功能与SQL的数据库操作能力结合在一起,提供了一种灵活且高性能的方式来构建数据库应用...

    精通PRO*c编程

    《精通PRO*C编程》这本书是针对Oracle数据库应用开发的一本专业指南,主要讲解如何使用PRO*C,Oracle提供的C语言预处理器,进行高效的数据库应用程序开发。PRO*C是Oracle Corporation为C程序员设计的一种工具,它...

    Pro*C程序设计ORACLE调用接口

    《Pro*C程序设计ORACLE调用接口》是关于在C语言中使用Oracle数据库的一种高效方法。Pro*C,全称为Pre-Compiler for C,是Oracle公司提供的一个预编译器,它允许开发者直接在C程序中嵌入SQL语句,极大地提高了数据库...

    VC整合Pro*C开发环境配置(图)

    Pro*C是Oracle公司提供的一种预编译器,它允许C/C++程序员直接在C或C++代码中嵌入SQL语句,从而实现与Oracle数据库的紧密交互。下面将详细阐述这一配置过程。 **1. 安装必要的组件** 首先,确保已经安装了以下组件...

    pro*c程序设计详解

    《Pro*C程序设计详解》是一本深入探讨Pro*C编程技术的专业书籍,旨在帮助读者全面理解和掌握Pro*C这一C语言与Oracle数据库交互的重要工具。Pro*C是Oracle公司提供的一种预编译器,它允许程序员在C语言中直接嵌入SQL...

    Pro*C

    **Pro*C**是一种由Oracle提供的C语言扩展,它允许开发者在C程序中直接嵌入SQL语句,并通过Oracle预编译器将其转换成标准C代码,从而实现数据库操作与业务逻辑的无缝集成。 #### 二、新特性介绍 - **ORACLE 9i ...

    pro*c 实现分页总结

    Pro*C,是Oracle提供的一种预编译器,用于将C语言与PL/SQL结合,使得在C/C++程序中可以直接操作Oracle数据库。本文将深入探讨如何在Pro*C中实现分页查询,主要关注两种常用的方法。 首先,让我们回顾一下基本的分页...

    oracle pro*c入门

    Oracle Pro*C 是一种预编译接口,用于在C或C++编程语言中嵌入SQL语句,以便直接与Oracle数据库进行交互。...使用Pro*C,开发者可以充分利用C语言的灵活性和Oracle数据库的强大功能,实现复杂的数据库应用。

    PRO*C的批量读取

    PRO*C(也称为预编译C)是一种允许在C程序中嵌入SQL语句的技术,它结合了C语言的强大功能与Oracle数据库的高效数据处理能力。本文主要探讨如何使用PRO*C进行高效的大规模数据导出。 #### 二、问题概述 假设有一个...

    Pro* C访问Oracle数据库技术研究.pdf

    Pro*C是C语言与Oracle数据库的一种融合,它允许开发者将C语言的灵活性与SQL的数据库操作能力相结合,从而实现高效的数据处理。 文章首先介绍了Pro*C的主要特点和优势。其一,Pro*C的源代码由C语言和内嵌的SQL语句...

    Oracle Pro*C 程序开发

    ### Oracle Pro*C 程序开发相关知识点 ...通过以上知识点的学习,开发者可以更加深入地理解Oracle Pro*C/C++程序开发的过程和技术细节,从而能够更加高效地利用这一工具进行数据库应用程序的开发。

Global site tag (gtag.js) - Google Analytics