zoukankan      html  css  js  c++  java
  • OCI编程

    OCI编码步骤:
    
    1、定义OCI数据结构
    2、连接到Oracle数据库:使用orlon函数调用还可以并发连接多个数据库。
    3、打开光标。通过调用oopen来打开一个光标。
    4、分析语句.使用oparse来分析语句,使语句和定义的一个光标联系。如果oparse的defflg参数为0的话,则数据定义语句在语句分析时执行;如果defflg为非0时,就必须调用oexn或oexec执行该语句,所有的数据操作语句和查询语句都需要进一步的处理。
    5、结合输入变量的地址。
       有三个OCI调用来将地址结合到虚拟变量中:obndrv、obndrn、obndra。
       使用obndrv时,必须指出虚拟变量的名字。如":num",名字不能是保留字。
       使用obndrn时,每一个虚拟变量的形式必须为:N,N是1-255之间的值。如SELECT demp,sor FROM table
    WHERE sor >:1 and sor<:2。obndrn不能和PL/SQL块一起使用。
       obndra用于把程序中的标量或数组的地址结合到SQL语句或PL/SQL块中的变量。
    6、描述选择表项。
       使用odescr来完成这个操作。
    7、定义选择表项。
       使用odefin来完成这个操作。
    8、执行语句。
       a、使用oexec来反复执行语句。
       b、oexn来执行单个语句输入许多值。
    9、提取查询行。
       oexfet  必须确保选择表项定义的输出变量是数组。
       ofen    必须确保选择表项定义的输出变量是数组。
       ofetch
    10、关闭光标。
        用oclose来关闭光标。
    11、断开和数据库的连接。
       使用ologof来断开和数据库的连接。
    
    调用OCI函数的几点说明:
    
      数据结构:  def_lda lda;
                 def_cda cda;
    
      参数:
          整型       (sword、sb4、ub4)
          短整型      (sb2、ub2)
          程序使用的变量
    
    oparse(struct cda_def * cursor,text *sqlstmt,sb4 sqllen,sword defflg,ub4 lngflg);
    调用格式如下:
        oparse(&cda,(text *)sqlstmt,(sb4) -1,(sword) 1,(ub4) 2);
      
    OCI程序和Oracle数据库的连接:
    
    (1)连接数据库
    orlon(struct lda_def * lda,ubl *hba,text *uid,[sword uid1],[text *pswd],[sword pswd1],<sword audit>);
    lda: 指向LDA指针
    hda: 指向256字节的属主数据区
    uid: 是指向字符串的指针,该串包含一个用户名、可选择的密码和可选择的属主机标识符,应把密码直接放在用户名之后,中间用"/"隔开。宿主机标识符放在用户名和密码的后面,用"@"字符分割。
    uid1: 是uid所指向的串的长度,如果该串是以null结束,则参数是-1。
    pswd: 是指向包含口令的指针,如果口令是uid所指向的一部分,则该参数是0。
    pswd1: 是口令的长度,如果pswd所指向的串是null或以null结束,则该参数是-1。
    audit: 该参数不再使用,是允许是0或-1。
    
    例子:
    /*OCI与ORACLE进行连接*/
    
    #include <stdlib.>;
    #include <ocidfn.h>;
    /*建立登录数据区*/
    lda_def lda;
    /*建立宿主数据区*/
    ub1 had[256];
    /*建立光标数据区*/
    cda_def cda;
    /*初始化数据库名和口令*/
    text *uid="dbtest/dbtest";
    /*定义一个串变量sql语句,并用PL/SQL块来初始化它*/
    char sql_statament[]="select * from emp;";
    /*连接数据库*/
    if (orlon(&lda,&had,uid,-1,(text*)0,-1,0)) 
    {   /*连接失败*/
    error_handler(&lda);
    exit(EXIT_FAILURE);
    }
    /*打开光标*/
    if (oopen(&lda,&cda,0,0,0,0,0))
    {  /*打开光标失败 */
       printf("Cannot open cursor, exiting......
    ");
       exit(1);
    }
    
    (2)打开光标
    oopen(struct cda_def *cursor,struct lda_def * lda,<text *dbn>,<sword dbnl>,<sword arsize>,<text *uid>,<sword uid1>);
    cursor: 指向程序内CDA的指针。
    lda: 是指向LDA的指针,该LDA是orlon调用所指向的那个LDA。
    dbn: 此参数是为ORACLE版本2兼容设置的,在比他高的版本中,应指定为0;
    dbn1: 此参数是为ORACLE版本2兼容设置的,在比他高的版本中,应指定为-1;
    arsize: 该参数在ORACLE中不再使用.
    uid: 是指向字符串的指针,该串包括用户标识和口令。
    uid1: 是uid所指串的长度,如果该串是null结束,则该参数可省略。
    
    (3)分析SQL语句。
    oparse(struct cda_def *cursor,text * sqlstmt,[sb4 sqll,sword defflg,ub4 lngflg]);
    cursor: 是指向CDA的指针,该CDA是在oopen调用中所指向的那个CDA。
    sqlstmt: 是指向包含SQL语句串的指针。
    sqll: 指出SQL语句的长度,如果由sqlstmt所指向的SQL语句串是null结束,则该参数可省略。
    defflg: 如果是非0,且该应用以延迟的方式被连接,则SQL语句被
    延期,直至desc、odescr、oexec,oexn或oexfet调用被执行。
    lngflg:决定ORACLE如果处理SQL语句或PL/SQL无名块。
  • 相关阅读:
    python之路-day31-守护进程、锁、队列、生产者消费者模型
    python之路-day30-进程
    python之路-day26 初探网络编程
    python之路-day25-包
    python之路-day21-模块介绍1
    python之路-day19-面向对象之约束
    递归格式模板
    java创建一个窗体
    异常throws关键字 异常throw关键字
    多个catch块
  • 原文地址:https://www.cnblogs.com/tychyg/p/5068952.html
Copyright © 2011-2022 走看看