达内培训机构PPT

简介 相关

截图

达内培训机构PPT

简介

这是一个关于达内培训机构PPT ,包括了PROC简介,PROC程序的编写步骤,宿主变量与指示变量,嵌入SQL语句,连接数据库,错误处理,数据的存取更新操作,动态sql等内容。1:数据库表列的值为NULL,指示变量相关联的输出宿主变量值不确定 =0:Oracle将数据库表列值原封不动的赋给指示器变量相关联的输出宿主变量0:Oracle将数据库表列值截断后赋给指示器变量相关联的输出宿主变量,指示器变量值为该列值的原始长度 Pro*C只支持一维数组 Pro*C不支持数组指针 Pro*C所支持数组最大维数是32767,超出此限制将报错 示例 EXEC SQL BEGIN DECLARE SECTION; int A[100]; char B[100]; char C; EXEC SQL END DECLARE SECTION; 在SQL语句中使用数组变量,只需给出:数组名称, 不要给下标,欢迎点击下载达内培训机构PPT 。

达内培训机构PPT是由红软PPT免费下载网推荐的一款公司管理PPT类型的PowerPoint.

PROC/C++课程 PROC/C++ Points Pro程序 Pro*C/C++程序在C/C++语言中嵌入SQL语句而开发出的应用程序称为Pro*C/C++程序。目的:使c/c++这种高效率语言成为访问数据库的工具。 Pro*C程序实例 Include 头文件 (c/c++ and pro*c/c++) 定义变量定义函数 main 连结数据库: connect SQL 操作语句: EXEC SQL …….; exception handler 断开连结:EXEC SQL COMMIT / ROLLBACK WORK release % vi a_1.c a_2.c % gcc –c a_1.c a_2.c % gcc -oa a_1.o a_2.o Pro*C程序开发运行流程 完成Pro*C源程序到纯C源程序的转换 基本命令格式 PROC INAME=filename [OptionName1=value1]…[OptionNameN=valueN] PROC常用预编译选项 INAME=path and filename (name of the input file) ONAME=path and filename (name of the output file) INCLUDE=path (头文件所在路径) --INCLUDE =路径名 或 INCLUDE =(路径名1,路径名2) PARSE=FULL | PARTIA | NONE (default FULL for C, Others for C++) CODE=ANSI_C | CPP (default ansi_c) USERID=username/password #include EXEC SQL BEGIN DECLARE SECTION; char user_passwd[20]; EXEC SQL END DECLARE SECTION; EXEC SQl include sqlca; main() { EXEC SQL WHENEVER SQLERROR stop; strcpy(user_passwd,"tarena/tarena"); EXEC SQL CONNECT:user_passwd; printf("\nConnected to ORACLE as user:%s\n" , user_passwd); } Pre-compile: proc myf.pc oname=myf.cpp parse=none code=cpp 2. Compile: g++ -omyfile myfile.cpp –lclntsh 3. Execute: myfile 数据类型 描述 char 单字符 char[n] N个定长字符数组 int 整数 short 短整数 long 长整数 float 单精度浮点数 double 双精度浮点数 VARCHAR[n] 变长字符串 输入 --- 将应用程序的数据传递到数据库中。 int salary, emp_number; cin>>salary; cin>>emp_number; EXEC SQL update emp set sal=:salary where empno= :emp_number; 输出 --- 将数据库的数据传递到应用程序中。 float v_salary; char v_job; EXEC SQL select sal,job INTO :v_salary, :v_job from emp where empno = 7788; cout<>table_name; EXEC SQL DROP TABLE :table_name; 指示变量(indicator variable) 短整型变量,用于处理数据库的NULL值,监督和管理与其相关联的宿主变量。 引用语法: :host_variable INDICATOR :indicator_variable OR :host_variable:indicator_variable 主要用在输出, 即当宿主变量用于接收数据库的返回数据时。 通过在宿主变量后用指示变量, 检测是否返回了NULL。 -1:数据库表列的值为NULL,指示变量相关联的输出宿主变量值不确定 =0:Oracle将数据库表列值原封不动的赋给指示器变量相关联的输出宿主变量0: Oracle将数据库表列值截断后赋给指示器变量相关联的输出宿主变量,指示器变量值为该列值的原始长度 Pro*C只支持一维数组 Pro*C不支持数组指针 Pro*C所支持数组最大维数是32767,超出此限制将报错 示例 EXEC SQL BEGIN DECLARE SECTION; int A[100]; char B[100]; char C[100][15]; EXEC SQL END DECLARE SECTION; 在SQL语句中使用数组变量,只需给出:数组名称, 不要给下标。 示例 EXEC SQL BEGIN DECLARE SECTION; int emp_number[100]; char emp_name[100][15]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT number,name INTO :emp_number, :emp_name FROM emp; 错误的例子: for(int i = 0;i < 100; i ++) { EXEC SQL SELECT number,name INTO :emp_number[i], :emp_name[i]; } 指示器数组例子: EXEC SQL BEGIN DECLARE SECTION; int emp_number[100]; char emp_name[100][15]; short ind_emp_number[100]; EXEC SQL END DECLARE SECTION; … EXEC SQL SELECT number,name INTO :emp_number:ind_emp_number,:emp_name; sqlcaid[8] 用于标识一个SQLCA sqlabc 用于保存SQLCA的长度 sqlcode用于保存最近一次运行SQL指令的状态 0 - 正常 >0 - 有一个异常发生 <0 - 系统错误,可能来自网络,或数据库本身 sqlerrm. sqlerrml保存错误文本信息的长度 sqlerrm. sqlerrmc保存错误文本信息,最长为70个字符 sqlerrp 系统保留 sqlerrd[6] 0,1 ,3,5-系统保留 2 -当前SQL指令处理的行数 4 -保存相对位移,指出在什么地方出现语法错误 sqlwarn[8] 0-指示是否设置了警告标志 1-指示是否将字符结果返回给宿主变量时,数据截短了 3-如果查询时,返回的列数和指定的宿主数组变量的维数不等时设置该位 4-UPDATE和DELETE时没有行被处理,设置改标志位 5-当EXEC SQL CREATE {PROCEDURE|FUNCTION|PACKAGE|PACKAGE BODY}失败时,设置该位 2,6,7-系统保留 sqlext[8] 系统保留 int main(){ … EXEC SQL INCLUDE sqlca; … EXEC SQL WHENEVER SQLERROR Do err_report(sqlca); … } void err_report( struct sqlca sqlca) { if (sqlca.sqlcode < 0) printf("\n%d%s\n\n",sqlca.sqlerrm.sqlerrml ,sqlca.sqlerrm.sqlerrmc); exit(1); } 当需要更进一步的信息时,ORACA将帮助我们达成愿望,所以ORACA也可以看作时SQLCA的补充和辅助。 struct oraca { /* text */ char oracaid[8]; /* Reserved */ /* ub4 */ int oracabc; /* Reserved */ /* ub4 */ int oracchf; /* <> 0 if "check cur cache consistncy"*/ /* ub4 */ int oradbgf; /* <> 0 if "do DEBUG mode checking" */ /* ub4 */ int orahchf; /* <> 0 if "do Heap consistency check" */ /* ub4 */ int orastxtf; /* SQL stmt text flag */ struct { /* ub2 */ unsigned short orastxtl; /* text */ char orastxtc[70]; } orastxt; /* text of last SQL stmt */ struct { /* ub2 */ unsigned short orasfnml; /* text */ char orasfnmc[70]; } orasfnm; /* name of file containing SQL stmt */ /* ub4 */ int oraslnr; /* line nr-within-file of SQL stmt */ /* ub4 */ int orahoc; /* highest max open OraCurs requested */ /* ub4 */ int oramoc; /* max open OraCursors required */ /* ub4 */ int oracoc; /* current OraCursors open */ /* ub4 */ int oranor; /* nr of OraCursor re-assignments */ /* ub4 */ int oranpr; /* nr of parses */ /* ub4 */ int oranex; /* nr of executes */ }; oracaid[8] 标识一个ORACA通信区 oracabc用于保存ORACA通信区的长度 oradbgf调试标志,0-关闭,1-开启 oracchf如果oradbgf=1,那oracchf遵循下列规则: 0-禁止光标缓冲一致性检查 1-进行光标缓冲一致性检查 orahchf如果oradbgf=1,那oracchf遵循下列规则: 0-禁止堆缓冲一致性检查 1-进行堆缓冲一致性检查 orastxtf可以是以下各值: 0-不保存SQL文本 1-仅对SQLERROR保存SQL文本 2-仅对SQLERROR和SQLWARNING保存SQL文本 3-总是保存SQL文本 要使用ORACA,那么就要显式的加载ORACA结构到Pro*C程序中。可通过语句 EXEC SQL INCLUDE oraca; EXEC ORACLE OPTION(ORACA=YES); 实现。 单个SQL语句的嵌入语法 事务控制语句 Commit, rollback and savepoint. EXEC SQL commit; EXEC SQL commit work release; EXEC SQL rollback work release; … EXEC SQL SAVEPOINT savepoint_insert; for( i = 1; i < 100; i++ ) { getInput1( empName, &salary ); EXEC SQL WHENEVER SQLERROR GOTO insert_error; EXEC SQL INSERT INTO emp( ename, sal ) VALUES( :empName, :salary ); } … EXEC SQL SAVEPOINT savepoint_delete; for( i = 1; i < 100; i++ ) { getInput2( &deptNo ); EXEC SQL WHENEVER SQLERROR GOTO delete_error; EXEC SQL DELETE FROM emp WHERE deptno = :deptNo; } … delete_error: EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL ROLLBACK TO SAVEPOINT savepoint_delete; … insert_error: EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL ROLLBACK TO SAVEPOINT savepoint_insert; … 数据操作语句(DML)语句列表 EXEC SQL Select …….; EXEC SQL Insert …….; EXEC SQL update …….; EXEC SQL Delete …….; 数据定义语句(DDL): create, alter, drop Example: EXEC SQL CREAT TABLE t1(cola int); EXEC SQL DROP TABLE t1; EXEC SQL ALTER TABLE t1 add(faxno number); 对象名, 列名不能用宿主变量. 自动提交事务 PL/SQL的嵌入语法 PL/SQL的嵌入—匿名块(anonymous blocks) PL/SQL的嵌入—package,procedure,function 先有连结, 后才能访问数据库. 连结的方法: 连结本地或远程数据库 连结一个或多个数据库 EXEC SQL CONNECT { :user IDENTIFIED BY :pswd | :usr_psw } [ [ AT { dbname | :host_variable } ] USING :connect_string ] [ ALTER AUTHORIZATION :newpswd ] ; 远端: 客户应用程序与oracle server 不在同一台机器上. 一个程序同时连接多个数据库或者建立多个连接到同一个数据库 Net8 为了给用户和开发人员提供oracle error message, Oracle 建议使用SQL通讯区(SQLCA). SQLCA is a C struct, 纪录每个当前SQL语句的执行状态,以便进行错误诊断和事件处理。 #include OR EXEC SQL INCLUDE SQLCA; SQLCA的信息结构 检测并处理sql语句错误。 语法: EXEC SQL WHENEVER condition: SQLWARNING, SQLERROR, NOT FOUND. action: CONTINUE, DO, GOTO, STOP,BREAK Example: EXEC SQL WHENEVER SQLWARNING CONTINUE; EXEC SQL WHENEVER SQLERROR DO sqlerror( ); EXEC SQL WHENEVER NOT FOUND DO notfound( ); 自动检查所有后面的SQL statements. 一般放在Before first SQL statement. If using more than one WHENEVER, 只有最近的 WHENEVER 起作用。 用WHENEVER 检查sql语句错误 用SQLCA描述错误 Rollback 所有的操作,release 资源. ... void sqlerror(); Main(){ EXEC SQL WHENEVER SQLERROR DO sqlerror(); EXEC SQL CONNECT:username IDENTIFIED BY:password; EXEC SQL update emp set comission=200 where emp_no=2; ….. } void sqlerror(){ EXEC SQL WHENEVER SQLERROR CONTINUE; cout<< "\n---- oracle error detected: " <Yuj红软基地

展开

同类推荐

热门PPT

相关PPT