一.什么是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
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