ProC的学习笔记.doc_第1页
ProC的学习笔记.doc_第2页
ProC的学习笔记.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Pro*C的学习笔记1、结构: 应用程序首部: |C外部变量说明部分 |ORACLE设置区(设置ORACLE资源的管理) | /*-使PROC在执行完后释放与嵌入SQL有关的资源*/ | EXEC ORACLE OPTION (RELEASE_CURSOR = YES); |ORACLE变量描述部分(SQL变量定义) | EXEC SQL BEGIN DECLARE SECTION | (SQL变量定义) | EXEC SQL END DECLARE SECTION; |SQL通信区 | EXEC SQL INCLUDE SQLCA; | 应用程序体: |函数体 |内部说明部分 | |C局部变量说明 | |ORACLE内部变量说明段 | | EXEC SQL BEGIN DECLARE SECTION | | (SQL变量定义) | | EXEC SQL END DECLARE SECTION; | |SQL通讯区 | | |执行部分 |C语句 |SQL或PL/SQL块 | EXEC SQL CONNECT: | IDENTIFIED BY: | SQL语句及游标使用; |2、关于变量声明和使用 - 声明变量大小写区分; - 宿主变量必须明确定义;如果在所有函数之外声明,则该变量为全局变量;如果在函数中声明,则为该函数的局部变量;一般将宿主变量声明为全局变量; - SQL语句中调用变量要在变量前加冒号 :; - 变量不能是SQL中保留字; - 指针变量也可以在SQL中调用,前面也要加冒号,而不是*号,在C中则加*; - 对于伪类型(Varchar型)的变量声明时要指明串的最大长度 如: VARCHAR book_name50; - 在数据库表中定义为VARCHAR2,VARCHAR,CHAR的字段,在PROC中可声明为CHAR,但长度应为它们在表中定义的长度加1,因为PROC中CHAR型变量用0做结尾; - 从SQL语句中取字段的值到宿主变量中时,PROC不会自动给宿主变量去掉右空格,可以用公用函数中的Trim()去除空格; - DATE型的处理:DATE型一般声明为CHAR(20); - 往表中插入DATE型数据时,一般用TO_DATE()函数进行类型转换,取出值时一般用TO_CHAR()函数进行类型转换;3、关于SQL通信区 - 通信区描述语句:EXEC SQL INCLUDE SQLCA; - 作用:提供了用户运行程序的成败记录和错误处理; - 其中SQLCA是一个结构体变量,是ORACLE提供给应用程序的一个接口; - 在SQLCA中sqlcode经常用到,它用来记录最近执行的SQL状态: - 0:表示该SQL语句被正确执行,无错误发生 - 0 :表示ORACLE执行了该语句,但遇到了错误 - 0 :表示由于数据库、系统、网络或应用程序错误等等原因ORACLE未执行该语句 注:ORACLE中对于sqlcode有详细对应情况,具体数值可查询ORACLE帮助4、应用程序体 C和SQL语句各司其责: - C语句用于逻辑控制 - SQL用于和数据库进行数据交互 连接数据库 - EXEC SQL CONNECT:/ 或 EXEC SQL CONNECT: IDENTIFIED BY: 注:用户名和密码是在CONNECT之前设置好的,不能把用户名或口令直接写到CONNECT语句中 如:EXEC SQL CONNECT SCOTT IDENTIFIED BY TIGER 是错误的5、数据库查询和使用游标 查询语句的组成:SELECT/INTO/FROM/WHERE/CONNECT BY/UNION(联合)/INTERSECT(交叉)/MINUS(减去)/GROUP BY(分组)/HAVING/ORDER BY(排序) - INTO从句中的主变量称为输出主变量 - WHERE从句中的主变量成为输入主变量 - 对于确定单行的数据查询不使用游标,但为避免出错而多加条件到WHERE子句:AND rownum2(限定只查询一笔数据) 多行查询和游标使用 - 操作游标有四个命令: - 定义游标:DECLARE CURSOR EXEC SQL DECLARE 游标名称 CURSOR FOR SELECT column_test FROM table_test; - 打开游标:OPEN CURSOR EXEC SQL OPEN 游标名称; - 读取游标:FETCH EXEC SQL FETCH 游标名称 INTO :name_column_test; - 关闭游标:CLOSE CURSOR 释放资源,语句如:EXEC SQL CLOSE 游标名称; - 循环操作取数据: - 步骤一:定义游标 EXEC SQL DECLARE c_test CURSOR FOR SELECT invnum,invseq,invdate FROM invsih WHERE invseq=1; - 步骤二:打开游标 EXEC SQL OPEN c_test; - 步骤三:循环读取数据 for(;) EXEC SQL WHENEVER NOT FOUND DO break; /*我们的做法是check sqlcode,判断是否取到值*/ EXEC SQL FETCH c_test INTO :intInvNum,:intInvSeq,:strInvDate; /*对于取出的数据进行一些操作*/ - 步骤四:关闭游标,提交事务,断开与数据库的连接,释放资源 EXEC SQL CLOSE c_test; /*Printf(Fetch data OK.n)*/ EXEC SQL COMMIT WORK RELEASE;6、错误处理: 关于WHENEVER语句: - WHENEVER是说明语句,不返回SQLCODE,只是根据SQLCA中的返回码指定相应的措施 - 格式:EXEC SQL WHENEVER SQLERROR|SQLWARNNING|NOTFOUND STOP|CONTINUE|GOTO; - 注意: - STOP|CONTINUE|GOTO的缺省值为CONTINUE; - SQLERROR:SQLCA.SQLCODE0; - SQLWARNNING:SQLCA.SQLWARN0=W; - NOTFOUND:SQLCA.SQLCODE=1403; 关于出错处

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论