proc个人笔记总结(共23页).doc

上传人:飞****2 文档编号:14094866 上传时间:2022-05-02 格式:DOC 页数:23 大小:100.50KB
返回 下载 相关 举报
proc个人笔记总结(共23页).doc_第1页
第1页 / 共23页
proc个人笔记总结(共23页).doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《proc个人笔记总结(共23页).doc》由会员分享,可在线阅读,更多相关《proc个人笔记总结(共23页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

16、/open123; int id=1;char name30=openlab;exec sql end declare section;exec sql connect:userpwd; /* ddl(不能用宿主变量) */ exec sql create table cmhtt(id number primary key, name varchar2(30); /* dml */ exec sql insert into cmhtt values( :id , :name); /* tcl */ exec sql commit; exec sql commit work release;复习

17、一下如何写一个proc程序 1.编写pc源代码 vi *.pc 2.把pc 变成 c 文件 proc *.pc 3.编译链接 gcc *.c -lclntsh 4.执行 ./a.out如何写proc+ 程序 proc 的预编译选项 include iname oname *.cpp parse none code cpp 宿主变量放入申明区 exec sql begin declare section; /*变量申明*/ exec sql end declare section; proc *.pc oname=*.cpp parse=none code=cpp g+ *.cpp -lclnt

18、sh宿主变量: 既能在sql 语句中使用 又能在宿主变量中使用 宿主变量的类型: char char varn 定长 short int long float double varchar varn 变长变长字符串的处理 1.varchar varchar var_namen=0; 在sql语句中正常使用 var_name.arr; 2.char_map =charz 默认 定长 0 空格补齐 charf|varchar2 定长 空格补齐 string 变长 0结尾宿主变量注意事项: 1.推荐把宿主变量放入申明区 2.可以使用指针 3.ddl 中不能有宿主变量-指示变量:反映数据库中的字段值赋

19、值给宿主变量时赋值的状态可以通过指示变量显示出来 =0 正常 =-1 NULL 0 截断赋值 /应该避免指示变量必须是short select 字段 into :宿主变量:指示变量-数组变量: (指示变量数组) 1.支持一维数组 字符除外 2.不支持数组指针 3.最大个数 32767select 语句中只需要给出数组名 不能给下标-遍历数组 sqlca.sqlerrd2通信区 sqlca.sqlcodesqlca.sqlerrm.sqlerrmc-oraca 通信区 1.包含 oraca exec sql include oraca; 2.打开oraca exec oracle option(

20、oraca=yes); 3.设置sql保存标志 oraca.orastxtf 0 1 2 3 4.得到sql oraca.orastxt.orastxtc (占位符)开始新知识了-proc 中如何嵌入sql语句 1.select exec sql select 字段 into :宿主变量 from 表 where 条件; 2.ddl dml tcl 前面加 exec sql 即可 ddl 不能有宿主变量 dml 可以使用宿主变量 3.proc 中如何嵌入plsql sqlcheck=semantics userid=用户/密码 a.proc 中嵌入存储过程 exec sql execute b

21、egin /*这里可以使用宿主变量调用存储过程*/ (这里的宿主变量要加:,因为这里的代码更偏向plsql) end; end-exec; 写一个存储过程 准备调用 存储过程中传入两个整数参数 把两个参数的和 放入第二个参数中 然后在proc 中调用这个存储过程 验证存储过程的功能. create or replace procedure getsum(var_x in number,var_y in out number) is begin var_y:=var_y+var_x; end;#include exec sql include sqlca;int main() exec sql

22、begin declare section; char userpasswd30=openlab/open123;int var_y=10000; exec sql end declare section; exec sql connect:userpasswd;exec sql execute调用存储过程,宿主变量使用最好加上冒号 begin getsum(2000,:var_y); end; end-exec; printf(var_y=%dn,var_y);exec sql commit work release;proc *.pc sqlcheck=semantics userid=o

23、penlab/open123-写一个函数 传入两个整数参数 返回两个整数参数的最大值 并且把两个参数的和 放入第二个参数中。写一个proc程序验证这个函数的功能。exec sql execute begin end;end-exec;create or replace function getMaxAndSum(var_x in number,var_y in out number)return number is var_temp number;begin var_temp:=var_y; var_y:=var_x+var_y; if var_tempvar_x then return va

24、r_x; end if; return var_temp;end;#include exec sql include sqlca;int main() exec sql begin declare section; char userpasswd30=openlab/open123; int var_x=1;int var_y=10000; int var_res=0; exec sql end declare section; exec sql connect:userpasswd;exec sql execute begin :var_res:=getMaxAndSum(:var_x,:v

25、ar_y); end; end-exec; printf(var_y=%dn,var_y);printf(var_max=%dn,var_res);exec sql commit work release;-数据库的连接 exec sql connect:userpasswd; exec sql connect:username identified by userpasswd; 本地连接.【数据库的远程连接:】1.数据库链的方式 远程数据库连接 都和 $ORACLE_HOME/network/admin/tnsnames.ora CAH_192.168.0.26 = (DESCRIPTION

26、 = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.26)(PORT = 1521) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tarena) ) )SERVICE_NAME 如何得到服务名echo $ORACLE_SID在192.168.0.26 建立和23的桥create database link my23linkconnect to openlab identified by open123using (DESCRIPTION = (ADDRE

27、SS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.23)(PORT = 1521) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tarena10g) ) ) ; windows 下 开发proc程序 1.编写proc代码 2.预编译 proc mremotedb.pc 3.编译链接 gcc mremotedb.c -lorasql10 -LE:oracleproduct10.1.0Db_1BIN 4. a.exe 必须在数据库中建立好 数据库链接 然后在做数据库操作时

28、要求先连接数据库 才能使用链接 2.第二种连接远程数据库 using 区分不同的数据库描述 区分数据库的连接 -at (贴标签) exec sql connect:userpasswd; exec sql connect:userpasswd using :rdb1; exec sql connect:userpasswd using :rdb2; 为了区分数据库的连接 at exec sql connect:userpasswd at :lab1; exec sql connect:userpasswd at :lab2 using :rdb1; exec sql connect:userp

29、asswd at :lab3 using :rdb2; exec sql at:lab2 select .; exec sql at:lab1 update .; exec sql at:lab3 delete .; exec sql at:lab2 commit; exec sql at:lab1 commit work release; exec sql at:lab2 commit work release; exec sql at:lab3 commit work release;#include exec sql include sqlca;int main() exec sql b

30、egin declare section; char userpasswd30=openlab/open123;char localuserpass30=openlab/open123;char rdb20=CAH_192.168.0.26;char var_name30;double salary;exec sql end declare section;exec sql connect:userpasswd using :rdb; /直接和远程数据库连接 exec sql select first_name,salary into:var_name,:salary from s_emp where id=1; printf(rdb var_name=%s,salary=%lf, var_name,salary); exec sql commit work release;-#include exec sql include sqlca;int main()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁