当前位置:  技术问答>linux和unix

UNIX下怎么操作ORACLE数据库,用标准C.急在线等....

    来源: 互联网  发布时间:2015-02-05

    本文导语:  哪位大哥帮帮忙,最好能给点代码!拜托 | Pro * C 的使用    一  Pro*C 程序概述:   1.什么是Pro*C程序       在ORACLE数据库管理和系统中, 有三种访问数据库的方法;      (1)...

哪位大哥帮帮忙,最好能给点代码!拜托

|
Pro * C 的使用
   一  Pro*C 程序概述:
  1.什么是Pro*C程序
      在ORACLE数据库管理和系统中, 有三种访问数据库的方法;
     (1)???????????? 用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库;
     (2)??????????用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,SQL*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有个感性的认识, 特将二者差别比较如下:
C源程序
         C的全程变量说明
                    函数1:同函数K。
                    函数2:同函数K。

                                   C的局部变量说明
                   函数K   
                                   可执行语句
                                              
                应用程序首部                  C的外部变量说明
                                              外部说明段(ORACLE变量说明)
                                              通讯区说明
     
 Pro*C源程序                     函数1:同函数K。
                                 函数2:同函数K。
                                                                 C局部变量说明
                程序体                     内部说明部分           内部说明段(ORACLE变量说明
                                                                 通讯区说明
                                                                 
                               函数K                         C的可执行语句           
                                            可执行语句         SQL的可执行语句                                                                                

|
二.Pro*C程序的组成结构
     
     每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体
     应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE等语句。
         应用程序的组成结构如图所示:                                          
     EXEC SQL BEGIN DECLARE SECTION
       (SQL变量的定义)
     EXEC SQL END DECLARE SECTION;
     EXEC SQL INCLUDE SQLLA;
     EXEC SQL CONNECT:  
                IDENTIFIED BY: 
     SQL 语句及游标的使用
     
     1.??? 应用程序首部
应用程序的首部就是Pro*C的开始部分。它包括以下三部分:
????????? C变量描述部分;
????????? SQL变量描述部分(DECLARE部分);
????????? SQL通信区。

     (1) .DECLARE部分(描述部分)
     描述部分说明程序的SQL变量, 定义部分以EXEC SQL BEGIN DECLARE SECTION ;开始和以 EXEC SQL END DECLARE SECTION ;结束的。它可以出现在程序的主部,也可出现在局部
     ???? SQL变量的说明和使用
在说明段能为SQL变量指定的数据类型如表所示:
     数据类型
     描述
     CHAR
     CHAR(n)
     INT 
     SHORT 
     LONG 
     FLOAT 
     DOUBLE 
     VARCHAR
     单字符
     n个字符数组
     整数
     短整数
     单精度浮点数
     双精度浮点数
     变长字符串
  这些数据类型实际上就是C语言的数据类型, 其中VARCHAR中视为C数据类型的扩充。这在以后会谈到。
     SQL变量的使用应注意以下几点:
     ???? 必须在描述部分明确定义
     ???? 必须使用与其定义相同的大小写格式
    ???? 在SQL语句中使用时,必须在其之前加一个“:”(冒号),但在C语句中引用时不需加冒号。
     ???? 不能是SQL命令中的保留字。
     ???? 可以带指示变量。
     例如: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;
          在使用数组时,应注意以下几点;
     ???? 不支持指针数组
     ???? 只支持一维数组, 而 emp-name [100][15]视为一维字符串
     ???? 数组最大维数为32767
     ???? 在一条SQL语句中引用多个数组时,这些数组维数应相同
     ???? 在VALUES , SET, INTO 或WHERE子名中, 不允许把简单SQL变量与数组SQL变量混用
     ???? 不能在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执行了该语句,但遇到一个例外(如没找到任何数据)。
          

    
 
 

您可能感兴趣的文章:

  • windows操作系统做服务器,客户端是unix操作系统,如何配置unix才能上网
  • Unix History-UNIX 操作系统发展史
  • 我是菜鸟,听说去银行工作最好精通unix,可我现在学的是基于win2000的《现代操作系统》请问对以后学unix帮助大吗?
  • 请问unix 操作系统是窗口界面还是文字界面的?
  • 新学者,各位不要吐血:哪儿有Unix的操作系统安装文件,我没有它的概念,我想学习之。Unix好神秘呀!
  • UNIX操作系统版本6是什么呀!
  • 请问没有UNIX操作系统,怎么学习UNIX?
  • unix操作系统教程那本比较好。
  • unix下用哪个命令操作串口
  • 类UNIX操作系统 Xinu
  • Unix操作系统哪里有下栽!
  • 如何修复被破坏的UNIX操作系统
  • 求介绍一本学习UNIX操作系统的书
  • 计算器上的类Unix操作系统 Punix
  • 关于unix操作系统的三个试题,谁能帮忙解答?
  • Unix操作系统内核 Fiwix
  • 朋友请来研究unix操作系统源码
  • 求unix简单操作命令教程?
  • HP-UX 11.0 采用的是unix操作系统吗?
  • 高分相送,关于UNIX与WINDOW操作系统的问题,急!!!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • UNIX下面能否使用类似BCP的程序连接另一台UNIX下面的Sybase数据库进行数据处理
  • 请问,在unix下,关闭oracle数据库和重起unix,的正确顺序和命令应该是怎样的!请教!
  • 有什么好的介绍UNIX使用和管理的书吗?UNIX下最常用的数据库是什么?
  • 怎样可以在WINDOWS下连到UNIX下的SYBASE数据库进行编程?
  • unix下一般用什么数据库。如(金融)行业!
  • windows应如何访问UNIX/LINUX系统下的数据库?
  • unix系统有没有本地数据库?类似windows下的access
  • 如何在sco/unix5.0下同时安装多个数据库(oracle和informix)???
  • http://www.itpub.net 论坛更新数据库,速度更快,欢迎大家前去讨论unix&linux知识!
  • 请教:关于[linux/unix环境下连接到Oracle数据库后断开连接]的问题
  • 我想用unix系统,主要是为了编程和数据库,用哪个好啊?
  • 有谁能推荐在unix下用oracle数据库开发软件的书籍吗?
  • Unix系统下如何将oracle数据库备份
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • putty远程链接上unix服务器,如何操作安装在上面的PostgreSQL数据库?
  • UNIX下数据库的问题
  • 计算器上的类Unix操作系统 Punix iis7站长之家
  • 请问去银行笔试unix ,数据库原理,都考哪些东东
  • 开发Unix下的数据库应用程序有什么好的参考书?
  • unix下C++代码中如何进行数据库操作?给个完整代码学习学习
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3