Day43_PRO_c

来源:互联网 发布:淘宝举报卖家会怎么样 编辑:程序博客网 时间:2024/05/07 05:13
一.什么是pro程序
  1.概念
    通过在过程化编程语言中嵌入sql语句 开发出的应用程序叫pro程序
  2.proc/c++
    目的:使c或者c++这种高效的语言 成为访问oracle数据库的工具
二.proc中和数据库操作相关的
  /* 包含sqlca这个数据结构 */
  exec sql include sqlca;
  /* 连接数据库 */
  exec sql connect:用户名/密码;
  /* 查询操作 */
  exec sql select 字段名 into 变量 from 表名 where 条件;
  /* 断开数据库连接 */  
  exec sql commit work release;
  exec sql rollback work release;
三.写一个c程序的步骤
  1.编写源代码
    vi  ***.c
  2.编译 链接
    gcc ***.c
  3.执行
    ./a.out
四.proc程序的开发流程
  1.编写源代码
    vi ***.pc
  2.预编译 把pc文件 变成c文件
    proc ***.pc
  3.编译 链接
    gcc ***.c -lclntsh
    gcc ***.c -lorasql10(windows)
  4.执行
    ./a.out
五.宿主变量
  1.概念
    c语言是宿主语言
    宿主语言定义的变量就是宿主变量,宿主变量的特点是既能在宿主语言中使用,又能sql语句中使用
  2.宿主变量的类型
    char  字符类型
    char  var[n] 定长字符串
    short 短整型
    int  整型
    long
    float  浮点
    double
    varchar var[n] 变长字符串
  3.定长字符串 和 变长字符串
    a.定长字符串 数据不够长度就补空格
    b.变长字符串
      char ---->varchar
    在select语句中 使用变长字符串的变量和定长字符串没有区别
    但在宿主语言中
    使用变长字符串的变量时 需要使用.arr把数据取出来
    一般变长字符要初始化,否则可能产生垃圾数据。可以使用零初始化
    varchar var[30]={0};
    还可以通过获得数据长度   然后在这个位置赋值一个'\0'   var_name.len
    c.使用proc的预编译选项处理字符串
      oname 相当于gcc的 -o
      char_map=charz  处理字符串时处理成定长 空格补齐 \0结尾 这是默认规则
              =varchar2|charf 处理成 定长 空格补齐
              =string 变长 \0结尾
  4.宿主变量的使用注意事项
    a.宿主变量在sql语句中使用时,变量名前加冒号
    b.DDL中不能使用宿主变量
      exec sql drop table table_name;
      exec sql drop table :table_name;//错误
    c.宿主变量 可以使用指针 但不推荐使用
    d.宿主变量的定义 强烈推荐放入申明区
      exec sql begin declare section;
      ...
      exec sql end declare section;
 
六、指示变量
  1.指示变量的作用
    当数据库中的字段值 赋值给宿主变量时赋值的状态可以通过指示变量得到
    指示的变量的值如果是:
    0     代表赋值正常
    ==-1    代表数据库中的字段值是NULL值
    >0    代表截断赋值  尽量避免
  2.指示变量的语法
    指示变量必须是short类型
    short indid;
    short indname;
    exec sql select id,first_name into :var_id:indid,:var_name:indname from s_emp where id=1;
    或
    exec sql select id,first_name into
    :var_id      indicator :indid,
    :var_name    indicator :indname
    from s_emp where id=1;
  3.把s_emp id=1的manager_id赋值给一个宿主变量 赋值的状态通过指示变量得到

七、数组变量
  1.数组变量的使用注意事项
    a.只能是一维数组  但字符除外
      int data[10];
      char name[50][30];
    b.不支持数组指针
    c.最大元素个数32767 超出后不保证正确
    d.在select语句中使用数组变量时,只能给数组的名字 不能给下标
    e.如果要指示多个变量的赋值状态 可以使用指示变量数组
  2.把e_mep 表中 所有的manager_id 和 first_name 分别放入到数组中,并且使用指示器 指示manager_id
 
八、sqlca通信区
  sqlca本质上是一个结构体
  程序中每执行一条sql 就会将sqlca中所有的字段都更新一遍,所以要得到一条sql的执行信息,要立即获取,否则会被下一条sql覆盖掉
  sqlca.sqlerrd[2] 可以得到sql语句影响的行数
 
  sqlca.sqlcode  sql的状态
     =0          执行正常
     >0          执行错误,一般是违反约束
     <0          数据库系统错误,网络错误
  sqlca.sqlerrm.sqlerrmc  得到sql出错的原因
 
九、oraca通信区
  对sqlca通信区的信息补充
  可以得到执行的sql语句
  oraca使用步骤
  1.包含oraca
    exec sql include oraca;
  2.打开oraca
    exec oracle option(orace==yes);
  3.设置sql的保存标志
    oraca.orastxtf
    /* oracla,ora sql txt flag */
    =0  默认值 默认不保存sql
    =1  当sql出错时保存sql
    =2  sql出现警告时 或者出错时保存
    =3  无论什么情况都保存
  4.得到sql文本
    oraca.orastxt.orastxtc
 
 export LIBRARY_PATH=$LD_LIBRARY_PATH
 export LIBRARY_PATH=$ORACLE_HOME/LIB
 source /etc/profile  
 
 
 
 
 
 
 
 
 
 
 

0 0
原创粉丝点击