proc/c++(一) 快速上手

来源:互联网 发布:淘宝我的回答能删除么 编辑:程序博客网 时间:2024/05/17 05:59

一、概念:

pro程序:通过在过程化编程语言中 嵌入sql语句开发出的应用程序叫pro程序。

宿主语言:sql语句所嵌入的语言。
proc   proc++目的:使c 或者 c++ 这种高效的语言成为访问oracle数据
的工具。

二、例子

连接数据库

方式一:exec sql  connect:用户名 identified by  密码;
方式二:exec sql  connect:用户名/密码; 
b 查询数据
exec sql  select  字段 into 变量  from  表
    where  条件;
c 断开数据库连接
exec sql  commit  work release;

linux上写一个proc程序的步骤
1.编写源代码
  vi     ***.pc 
2.预编译    把pc文件变成c文件
  proc   ***.pc 
3.编译  链接
  gcc    ***.c   -lclntsh
  gcc    ***.c   -lorasql10 (windows)
4.执行
  ./a.out

一个例子

#include <stdio.h>#include <stdlib.h>#include <string.h>#include "util.h"#include <sqlca.h>EXEC SQL INCLUDE SQLCA; (1)int main(){    EXEC SQL BEGIN DECLARE SECTION;// (2)    char firstname[13];    char userid[9]="open123";    char passwd[19]="open";    EXEC SQL END DECLARE SECTION;    EXEC SQL CONNECT:userid identify by passwd; //(3)    EXEC SQL SELECT FIRSTNME INTO :firstname   // (4)     FROM employee    WHERE LASTNAME = 'JOHNSON'; //(4)    printf( "First name = %s\n", firstname );    EXEC SQL CONNECT RESET; //(5)    return 0;}

上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分:
(1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。
(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。
(4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。
(5)最后断开数据库的连接。
从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”

proc  的预编译选项
和c++相关的
oname   默认生成是.c文件 如果改成c++的需要制定成.cpp
iname   输入文件名  可以省略
parse   解析方式  默认是full c的方式.  c++ 推荐的方式:none   严格的c++解析:partia ( 不推荐使用)
code    默认是ansi_c .   c++ 使用 cpp

proc++ 例子

#include <iostream>using namespace std;exec sql  include sqlca;int main(){exec sql  begin declare section;    char  userpasswd[30]="openlab/open123";char  var_name[30];exec sql  end   declare section;/* 连接数据库 */exec sql  connect:userpasswd;    /* 查询s_emp表中的 first_name id=1 */exec sql  select  first_name into :var_name from s_emp where id=1;cout<<"var_name="<<var_name<<endl;exec sql  commit work release;}
预编译:

proc  iname=second.pc  oname=second.cpp 

    parse=none code=cpp 

编译:g++   second.cpp   -lclntsh

执行:

./a.out

注意:

.c++  要求把所有的在sql中使用的变量 放入申明区

c语言 在linux  和unix 下不用把在sql中使用的变量
放入申明区。c++ 无论在哪个系统下都需要把这些变量
放入申明区。
exec sql  begin declare section;
    /* 这就是申明区 */
exec sql  end   declare section;

三 宿主变量

既能在sql语句中使用,又能在宿主语言中使用.

1.宿主变量的类型
  char 
  char    var[n]  定长字符串
  short   
  int 
  long
  float
  double
  varchar  var[n]  变长字符串
  
  a.变长字符串的使用
    varchar   var_name[n]={0};
    在sql语句中 和定长字符串没有区别
    exec sql select first_name into :var_name
        from s_emp where id=1;
    在c中访问数据需要使用 .arr
    printf("var_name=%s\n",var_name.arr);
    可以得到放入变长字符 数据的长度
    var_name.len
    在数据的之后 设置一个\0
    var_name.arr[var_name.len]='\0';
  b.处理变长字符串的方式2 
    使用 char_map=charz 定长处理  空格补齐 \0结尾
                 =charf|varchar2  定长 空格补齐
=string 变长  \0结尾 
   eg:   proc  charn.pc  char_map=string     //这样就可以将charn.pc程序中的所有定长字符串变成 变长字符串了。
 2.宿主变量的注意事项
   1.强烈推荐把宿主变量放入申明区
     exec sql  begin declare section;
     exec sql  end   declare section;
   2.宿主变量可以使用指针   不推荐使用
   3.DDL中不能使用宿主变量
   4.在sql中使用宿主变量时 推荐加上冒号
     exec sql  select  first_name into :var_name 
         where id=:id;
原创粉丝点击