pro*C/C++笔记

来源:互联网 发布:那个阅读软件书最全 编辑:程序博客网 时间:2024/06/08 06:55

什么是proc程序

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

宿主语言: sql语句所嵌入的语言

proc proc++

目的:使c和c++这种高效的语言成为访问oracle数据库的工具

 

一个proc程序中

引入相关的头文件

定义需要的变量

声明函数

实现函数

 

连接数据库

exec sql connect:username identified by password

exec sql connect:username/password

查询数据库

exec sql select 字段 into 变量 from 表 where 条件

断开数据库连接

exec sql commit work release

****************************************************

编写步骤:

1. vi ***.pc    2 proc   ***.pc   3.  gcc ***.c -lclntsh (linux)     -lorasql10(windows)     4.执行

proc的预编译选项

oname 默认是.c文件, 如果是c++需要定制成.cpp

parse   解析方式 ,默认是full c的方式 ;partia严格的c++解析, 不推荐使用; none c++推荐的方式

code 默认是ansi_c, c++使用cpp

例子 proc iname=demo.pc oname=demo.cpp parse=none code=cpp

c++要求吧所有的在sql使用的变量放入到申明区

c语言在linux和unix下不用把sql使用的变量放入申明区。c++无论在哪个系统下都需要把这些变量放入到申明区。

exec sql begin declare section;

/* 这里是申明区 */

exec sql end declare section;

c++编译链接使用g++ ***.cpp -lclntsh

**************************************

proc 和plsql滴哦啊用相关的预编译选项sqlcheck=semantics  userid=用户名/密码

proc 和字符串处理相关的预编译选项 char_map

**************************************

宿主变量:既能在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

b.处理变长字符串的方式2

使用char_map=charz定长处理 空格补齐 \0结尾

=charf|varchar2 定长 空格补齐

=string 变长 \0结尾

proc charn.pc char_map=string

2 宿主变量的注意事项

1.强烈推荐把宿主变量放入申明区

2宿主变量可以使用指针 不推荐使用

3DDL中不能使用宿主变量

4 在sql中使用宿主变量时 推荐加上冒号

******************************************************

指示变量必须是short类型。(indicator)

exec sql select first_name, manager_id into :var_name,:mid:indmid from s_emp;

exec sql select first_name, manager_id into :var_name,:mid indicator :indmid from s_emp;

******************************************************************************

数组变量

proc 只支持一维数组字符除外

proc不支持数组指针

最大元素32767

数组变量在select语句中使用时, 只能给出数组名,不能给下标

把s_emp表中所有的first_name, connission_pct分别放入两个数组中, 然后指示提成的赋值状态

*******************************************************************************

可以从sqlca中获取sql语句影响的行数据

sqlca通信区

sqlca.sqlerrd[2]   sql语句影响的行数

sqlca.sqlcode sql语句执行的状态

==0sql语句执行正常

〉0异常发生, 一般违反约束

〉0 数据库本身出错, 或者 网络错误

sqlca.sqlerrm.sqlerrmc 得到sql执行出错原因

*******************************************************

oraca  也是一个通信区,它是对sqlca的信息补充

资源小猴比较大 所以这个通信区默认关闭

1 包含oraca

exec sql include oraca;

2打开oraca通信区

exec oracle option (oraca=yes)

3设置sql语句的保存状态 oraca.orastxtf

     0 默认的 不保存sql

     1 sql出错时保存

      2 sql出现警告保存

      3无论什么情况都保存

4 从oraca中得到sql文本

 oraca.orastxt.orastxtc

 

 

 

 

 

 

 

0 0
原创粉丝点击