proc个人笔记总结(共23页).doc
《proc个人笔记总结(共23页).doc》由会员分享,可在线阅读,更多相关《proc个人笔记总结(共23页).doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上王小龙Proc个人笔记总结专心-专注-专业procpro程序:通过在过程化语言中 嵌入sql语句 开发出的程序叫pro程序.宿主语言:sql语句所嵌入的语言为什么要使用 proc /proc+:使c 或者c+ 这种高效的语言成为访问 oracle数据库的工具./*连接数据库*/exec sql connect:username identified by :password; /分开的exec sql connect:usernamepasswd; /连着的/*查询*/exec sql select 字段 into :变量 from s_emp where id=1;
2、/*断开数据库的连接*/exec sql commit work release;exec sql rollback work release;1.编写c的源代码 如何编写一个c程序 vi *.c2.编译 链接 gcc *.c 3.执行1.编写源代码 vi *.pc2.预编译 proc *.pc 开发一个proc程序的步骤 会得到对应的c文件 3.编译 链接 gcc *.c -lclntsh gcc *.c -lorasql10 (windows) gcc *.c -lorasql10 -L 库的位置 4.执行 ./a.out vi first.pc#include 在sql语句中使用c的变量
3、最好加上:,这样强调说明是c中的变量,以防c中的变量和表中的字段名相同exec sql include sqlca;int main() char userpasswd30=openlab/open123; char var_name25; exec sql connect:userpasswd; exec sql select first_name into :var_name from s_emp where id=1; printf(var_name=%sn,var_name); exec sql commit work release; proc first.pc 得到一个 first
4、.c 1.写源代码 vi first.pc 2.如果本地有 proc 则把 first.pc 预编译成 first.c proc first.pc 如果本地没有proc 就把first.pc 上传到服务器 3.在服务器上 编译链接 gcc *.c -lclntsh 4.执行/*写一个proc程序 把s_emp 表中的id=1的first_name salary 查询出来放入c的变量中 然后输出这些信息*/ #include exec sql include sqlca; int main() char userpwd30=openlab/open123; char var_name25; do
5、uble var_salary; int id=2; exec sql connect:userpwd; exec sql select first_name,salary into :var_name,:var_salary from s_emp where id=:id; printf(%s:%lfn,var_name,var_salary); exec sql commit work release; 如何把proc程序 改成 proc+程序? #include using namespace std; exec sql include sqlca; int main() exec sq
6、l begin declare section; char userpwd30=openlab/open123; char var_name25; double var_salary; int id=2; exec sql end declare section; exec sql connect:userpwd; exec sql select first_name,salary into :var_name,:var_salary from s_emp where id=:id; coutvar_name:var_salary0 截断赋值 尽量避免指示变量只能是 short类型select
7、 first_name into :var_name indicator:indname from s_emp wher id=1;select first_name into :var_name :indname from s_emp wher id=1; #include exec sql include sqlca;int main() exec sql begin declare section; char userpwd30=openlab/open123; /*定义一个指示器 指示manager_id的赋值状态*/ short indmid=0; int mid=10000;exe
8、c sql end declare section;exec sql connect:userpwd; exec sql select manager_id into :mid:indmid from s_emp where id=1; printf(mid=%d,indmid=%hdn,mid,indmid);exec sql commit work release;-【数组变量:】 1.只支持一维数组(字符除外) 2.不支持数组指针 3.数量受限制 在select语句中 使用数组变量 只需要给出 :数组名 不能给下标.s_emp表中所有manager_id和first_name分别放入数组
9、中并且指示manager_id的赋值状态 int mids50; char names5030; short indmids50; short indnames50; #include exec sql include sqlca; int main() exec sql begin declare section; char userpwd30=openlab/open123; int mids50; short indmids50;names的复制状态mids的复制状态 char names5030; short indnames50; exec sql end declare secti
10、on; exec sql connect:userpwd; exec sql select manager_id,first_name into :mids:indmids,:names:indnames from s_emp; int i=0; for(i=0;i0 异常发生 0 系统错误 或者 网络错误 sqlca.sqlerrm.sqlerrmc 当sql执行出错 可以得到错误的消息内容其它字段 系统保留(0,1,3,5)(2和4有用)sqlca 是每个事务中维护的一个结构体,同一事务中的sql 执行完以后要立即使用sqlca中的字段状态 否则会被下一条sql的状态覆盖掉.#includ
11、e exec sql include sqlca;int main() exec sql begin declare section; char userpwd30=openlab/open123; int mids50;short indmids50; char names5030; short indnames50;exec sql end declare section;exec sql connect:userpwd;if(sqlca.sqlcode=0) printf(connect db success!n); exec sql select manager_id,first_na
12、me into :mids:indmids,:names:indnames from s_emp;if(sqlca.sqlcode=0) printf(select db successn); else printf(%sn,sqlca.sqlerrm.sqlerrmc); int i=0; for(i=0;isqlca.sqlerrd2;i+) printf(%d:%hd,%s:%hdn, midsi,indmidsi,namesi,indnamesi); exec sql commit work release;-【oraca】 也是一个通信区 是对sqlca信息的补充. 可以从oraca
13、得到执行的sql语句 oraca 非常消耗系统资源 默认是关闭的1.如何包含oraca exec sql include oraca;2.打开oraca exec oracle option(oraca=yes);3.设置sql的保存标志 oraca.orastxtf = 0 默认的不保存sql 1 当sql出错时保存 2 当出现警告 或者出错时保存 3 都保存sql4.如何得到sql文本 oraca.orastxt.orastxtc #include exec sql include sqlca; exec sql include oraca; exec oracle option(orac
14、a=yes); int main() oraca.orastxtf=3; exec sql begin declare section; char userpwd30=openlab/open123; char var_name30; int var_id=2; exec sql end declare section; exec sql connect:userpwd; exec sql select first_name into :var_name from s_emp where id=:var_id; printf(%sn,oraca.orastxt.orastxtc); exec
15、sql commit work release; -proc 最简单 最重要 proc中如何嵌入sql 1.嵌入 select 语句 exec sql select id,first_name into :var_id,:var_name from s_emp where id=1; 2.dml tcl ddl 在前面加exec sql 即可 ddl 中不能有宿主变量 3.proc 中如何嵌入plsql#include exec sql include sqlca;int main() exec sql begin declare section; char userpwd30=openlab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- proc 个人 笔记 总结 23
限制150内