欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:14094866       资源大小:100.50KB        全文页数:23页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精选优质文档-倾情为你奉上王小龙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;/*断开数据库的连接*/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 <stdio.h>在sql语句中使用c的变量最好加上:,这样强调说明是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.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 <stdio.h> exec sql include sqlca; int main() char userpwd30="openlab/open123" char var_name25; double 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 <iostream> using namespace std; exec sql include sqlca; int main() exec sql 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; cout<<var_name<<":"<<var_salary<<endl; exec sql commit work release; proc的预编译选项 oname .输出文件名 默认是.c 的 如果使用c+ .cppproc inname=second.pc oname=second.cpp iname 输入文件名 这个选项可以省略parse 解析方式 默认是 full的c方式 如果使用c+ 需要使用 partia 严格的c+检查 不推荐使用proc inname=second.pc oname=second.cpp parse=none code=cpp none c+推荐使用code 代码风格 默认是 ansi_c c的方式 c+ 需要使用 cpp当code=cpp 时 则必须把sql中使用的 宿主变量 必须放在申明区.exec sql begin declare section; /*变量定义*/exec sql end declare section;proc mycpp.pc oname=mycpp.cpp parse=none code=cpp g+ mycpp.cpp -lclntsh其它的预编译选项include 指定头文件的位置char_map 对字符串的预编译处理和plsql调用相关的 sqlcheck=semantics userid=用户名/密码-变量既能在 宿主语言中使用 又能在sql语句中使用 这种变量叫宿主变量. proc 中的宿主变量 和 c 变量没有任何区别 proc+ 中 code=cpp 要求c+ 的宿主变量必须放在申明区 exec sql begin declare section; exec sql end declare section; 但在windows下开发 proc 程序 也要求 把宿主变量放在申明区. 为了好记加方便,以后所有的宿主变量都放在申明区.宿主变量类型: char char varn 定长字符串 short int long float double varchar varn 变长字符串【a.变长字符串1】定义变量时要初始化 varchar var_name25=0;正常放入值exec sql select 字段 into :var_name from 表 where 条件;访问时var_name.arr;【b.变长字符串2】 char_map=charz 默认的 定长 0结尾 空格补齐 charf|varchar2 .定长 空格补齐 string .变长 0结尾-宿主变量的注意事项? 1.推荐把所有宿主变量放在申明区。 2.可以使用指针 但必须提前分配内存空间 exec sql begin declare section; char userpwd30; char *var_name=userpwd; exec sql end declare section; exec sql select first_name into :var_name from s_emp where id=1; 3.proc 中可以直接使用ddl 但ddl 不能包含宿主变量 exec sql drop table :var_name; /error,不能包含宿主变量 exec sql drop table test;-【指示变量:】当数据库中的字段值 赋值给宿主变量时赋值的状态 可以通过指示变量得到. 指示变量=0 赋值正常 = -1 数据库中的字段值是NULL >0 截断赋值 尽量避免指示变量只能是 short类型select 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 <stdio.h>exec sql include sqlca;int main() exec sql begin declare section; char userpwd30="openlab/open123" /*定义一个指示器 指示manager_id的赋值状态*/ short indmid=0; int mid=10000;exec 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分别放入数组中并且指示manager_id的赋值状态 int mids50; char names5030; short indmids50; short indnames50; #include <stdio.h> 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 section; 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;i<sqlca.sqlerrd2;i+) printf("%d:%hd,%s:%hdn", midsi,indmidsi,namesi,indnamesi); exec sql commit work release; -通信区: 【sqlca】 就是通信区proc 程序和 oracle数据库通信的区域 实际上sqlca是一个结构体. sqlca.sqlerrd2 得到sql语句所影响的函数 sqlca.sqlcode 反应sql语句的执行状态(在要判断的SQL语句之后用) =0 执行正常 >0 异常发生 <0 系统错误 或者 网络错误 sqlca.sqlerrm.sqlerrmc 当sql执行出错 可以得到错误的消息内容其它字段 系统保留(0,1,3,5)(2和4有用)sqlca 是每个事务中维护的一个结构体,同一事务中的sql 执行完以后要立即使用sqlca中的字段状态 否则会被下一条sql的状态覆盖掉.#include <stdio.h>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_name 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;i<sqlca.sqlerrd2;i+) printf("%d:%hd,%s:%hdn", midsi,indmidsi,namesi,indnamesi); exec sql commit work release;-【oraca】 也是一个通信区 是对sqlca信息的补充. 可以从oraca得到执行的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 <stdio.h> exec sql include sqlca; exec sql include oraca; exec oracle option(oraca=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 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 <stdio.h>exec sql include sqlca;int main() exec sql begin declare section; char userpwd30="openlab/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;复习一下如何写一个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 -lclntsh宿主变量: 既能在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 中不能有宿主变量-指示变量:反映数据库中的字段值赋值给宿主变量时赋值的状态可以通过指示变量显示出来 =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(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 begin /*这里可以使用宿主变量调用存储过程*/ (这里的宿主变量要加:,因为这里的代码更偏向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 <stdio.h>exec sql include sqlca;int main() exec sql 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=openlab/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_temp<var_x then return var_x; end if; return var_temp;end;#include <stdio.h>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,:var_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 = (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 = (ADDRESS_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 必须在数据库中建立好 数据库链接 然后在做数据库操作时 要求先连接数据库 才能使用链接 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:userpasswd 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 <stdio.h>exec sql include sqlca;int main() exec sql begin 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 <stdio.h>exec sql include sqlca;int main()

    注意事项

    本文(proc个人笔记总结(共23页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开