proC程序设计-4

上传人:痛*** 文档编号:244191627 上传时间:2024-10-03 格式:PPT 页数:40 大小:336KB
返回 下载 相关 举报
proC程序设计-4_第1页
第1页 / 共40页
proC程序设计-4_第2页
第2页 / 共40页
proC程序设计-4_第3页
第3页 / 共40页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Welcome to Pattern World,*,Tiger.Wang,Email:W MSN:W,*,Pro*C,程序设计,Tiger Consultation Studio,2024/10/3,1,Tiger.Wang,Email:W MSN:W,目录,Pro*C,概述,Pro*C,基础知识,事务处理,动态,SQL,技术,总结,2024/10/3,2,Tiger.Wang,Email:W MSN:W,动态,SQL,技术,动态,SQL,编程是,Pro*C/C+,中,一种比较高级,的编程方法,它,增强,了,应用程序,的灵活性和可,扩展,性,,运行应用程序,在,运行,状态时,动态,组织,SQL,语句,并,执行,和,处理执行,结果。,Oracle,支持,如下两种动态,SQL,语句,标准动态,SQL,语句,Oracle,高级动态,SQL,语句,Oracle,动态,SQL,不支持,以下列表,的,数据类型,:,CURSOR,类型,结构数组,(arrays of,struct,),DML,语句,的,返回子句,(returning),Unicode,变量,LOBS,类型,2024/10/3,3,Tiger.Wang,Email:W MSN:W,动态,SQL,含义,动态,SQL,就是,在,应用程序执行期间,组织、,准备,、,执行,SQL,语句,的方法和技术。,在,一些应用程序,中,需要,根据,业务逻辑,特点接收,应用程序外部传输过来,的,变量,,在,运行时决定执行什么,结构的,SQL,语句,,,例如:,根据用户,输入,的表名,,删除,该表,对应,的数据,由于,SQL,变量在静态,SQL,语句,时,不能应用,到,DELETE,表名,位置,的,,所以,没有,办法,在,执行过程,中,通过静态,SQL,语句完成这样,的,功能,。,而,动态,SQL,语句,则,可以接受,用户,输入,,,动态,的组织,SQL,语句,,,完成上述要求,。,2024/10/3,4,Tiger.Wang,Email:W MSN:W,动态,SQL,的,优缺点,优点,:,增强应用程序,灵活性,增强应用程序扩展,性,完成静态,SQL,所,不能完成,的,工作,缺点:,编码,相对复杂,执行,效率没有,静态,SQL,好,2024/10/3,5,Tiger.Wang,Email:W MSN:W,动态,SQL,适用环境,在,应用程序执行,时,,如果以下元素,在,编写代码,时,不确定,就,需要使用动态,SQL,:,SQL,语句书写方式,SQL,变量,/,宿主变量,数目,SQL,变量,/,宿主变量数据类型,未知,Oracle,数据库,Objects(,表、,视图、索引、列等,),属性,2024/10/3,6,Tiger.Wang,Email:W MSN:W,动态,SQL,执行条件,(,1,),无论如何执行动态,SQL,语句,,都,需要一个包含,有效的,SQL,语句,(不,包括,EXEC SQL,语句,)、或,下面嵌入,式,SQL,指令,的,字符串,:,ALLOCATE,CLOSE,DECLARE,DESCRIBE,EXECUTE,FETCH,FREE,GET,INCLUDE,OPEN,PREPARE,SET,WHENEVER,2024/10/3,7,Tiger.Wang,Email:W MSN:W,动态,SQL,执行条件,(,2,),嵌入,式,SQL,指令,的,字符串,中,,通常包含,假的,宿主变量,这些,假的,宿主变量,只为,告诉预处理,器在该,位置需要进行变量,替换,这些,假,宿主变量不需要声明,,,可以采用任意命名方式,如下两个,语句,对,动态,SQL,来,说是完全一样,的,,尽管,有“,:mgr_number,、,:job_title,”和“,:m,、,:j,”在,样式,上的,区别,,,这些,假,宿主变量通常称为占位符,号。,“DELETE FROM EMP WHERE MGR=:mgr_number AND JOB=:job_title”,“DELETE FROM EMP WHERE MGR=:m AND JOB=:j”,2024/10/3,8,Tiger.Wang,Email:W MSN:W,动态语句执行过程,通常一个应用程序,提示用户,输入,SQL,语句,组成,要素,到,宿主变量,中,应用程序,根据,宿主变量,值组织,SQL,语句,提交,SQL,语句,到,Oracle,数据库服务器进行语法检查,Oracle,绑定,(,bind,),宿主变量,到,准备好的,SQL,语句,中,此时,Oracle,得到宿主变量,的,地址,,以能对,变量内容进行读写,Oracle,执行,(,execute,),准备好的,SQL,语句,随着宿主变量,的,变化,,,Oracle,可以重复执行,这条,SQL,语句,。,2024/10/3,9,Tiger.Wang,Email:W MSN:W,使用动态,SQL,的方法,方法1:,无,SQL,变量的非查询语句,方法,2,:,已知输入变量个数,的非,查询语句,方法,3,:,已知,SELECT,语句选取,列和,输入宿主变量个数,的,查询语句,方法,4,:,未知,SELECT,语句选取,列或,输入宿主变量个数,的,查询语句,也,适用,于未知列名,列表,和,输入宿主变量,的,其他,DML,语句,,,只是其他语句处理,比,SELECT,查询定义,游标要,简单,2024/10/3,10,Tiger.Wang,Email:W MSN:W,方法1:,无,SQL,变量的非查询语句,应用程序,接收,外界输入构造,SQL,语句,到,一个字符串,然后调用,EXECUTE IMMEDIATE,命令执行这个,SQL,语句,这种,SQL,语句,不,能为,SELECT,语句,,,不能包含输入变量,的,占位符,。,例如,:,DELETE FROM EMP WHERE DEPTNO=20,GRANT SELECT ON EMP TO,scott,缺点,此种方法每执行一次,SQL,语句,,,数据库,都,需要解析,一遍,SQL,语句,所以,这种,方法只,适合运行一次,或,少数,几次,,否则严重影响应用程序,效率。,EXECUTE IMMEDIATE,命令,的,语法,为:,EXEC SQL EXECUTE IMMEDIATE :host_string|string_literal;,2024/10/3,11,Tiger.Wang,Email:W MSN:W,方法1:代码示例,char dynstmt110;,VARCHAR dynstmt280;,EXEC SQL EXECUTE IMMEDIATE,CREATE TABLE dyn1(col1 VARCHAR2(4);,strncpy,(dynstmt1,COMMIT,10);,EXEC SQL EXECUTE IMMEDIATE:dynstmt1;,strcpy,(dynstmt2.,arr,DROP TABLE DYN1“);,dynstmt2.,len,=,strlen,(dynstmt2.,arr,);,EXEC SQL EXECUTE IMMEDIATE:dynstmt2;,EXEC SQL COMMIT RELEASE;,2024/10/3,12,Tiger.Wang,Email:W MSN:W,方法,2,:,已知输入变量个数,的非,查询语句,应用程序接受,或,组建一个,SQL,语句,,并,通过,PREPARE,和,EXECUTE,语句执行这个,SQL,,,不能,是,查询语句,。,为,输入宿主变量准备,的,占位符,数目和,输入宿主变量,的,类型必须已知,,,例如,:,INSERT INTO EMP(ENAME,JOB)VALUES(:,emp,_name,:job_title),DELETE FROM EMP WHERE EMPNO=:,emp,_number,对,方法2,来说,,SQL,语句,只在,PREPARE,时,解析一次,,,以后可以执行多次,,并随,输入宿主变量,的,不同,而,执行,结果,不同,。,对于,数据,定义语句,(DDL SQL),语句,,,例如,CREATE,和,GRANT,,随,PREPARE,语句执行,。,2024/10/3,13,Tiger.Wang,Email:W MSN:W,方法,2,:,已知输入变量个数,的非,查询语句,PREPARE,语法格式如下,:,EXEC SQL PREPARE statement_name FROM :host_string|string_literal;,PREPARE,语句解析,host_string,宿主变量对应,的,SQL,语句,,并,指定一个语句名称,statement_name,,,语句名称不是一个宿主变量,,,不需要声明,,,只是一个编译标识,。,EXECUTE,语法格式如下,:,EXEC SQL EXECUTE statement_name,USING host_variable_list;,其中,host_variable_list,格式如下,:,:host_variable1:indicator1,host_variable2:indicator2,.,EXECUTE,通过,USING,子句读取输入,的,宿主变量,,,执行经过,PREPARE,解析,过的,SQL,语句,statement_name,。,USING,子句,中,如果一个,是数组,宿主变量,,,USING,子句中的宿主变量必须,全是数组,类型,。,2024/10/3,14,Tiger.Wang,Email:W MSN:W,方法2:代码示例,VARCHAR,dynstmt,80;,int empno,=1234,deptno1=97,i=0;,strcpy,(,dynstmt,.,arr,INSERT INTO EMP(EMPNO,DEPTNO)VALUES(:v1,:v2);,dynstmt,.,len,=,strlen,(,dynstmt,.,arr,);,EXEC SQL PREPARE,sql,_statement FROM:,dynstmt,;,For(i=0;i MAX;i+),EXEC SQL EXECUTE,sql,_statement USING:,empno,:deptno1;,empno,+;,EXEC SQL COMMIT RELEASE;,2024/10/3,15,Tiger.Wang,Email:W MSN:W,方法,3,(1),构造动态查询语句,,,通过接受,或构建,SQL,语句,,用,DELCARE,、,PREPARE,和,OPEN,、,FETCH,、,CLOSE,语句执行动态查询,SQL,语句,,并,访问查询,结构。,适用,于,已知,SELECT,查询,的各列、列,类型,、,输入宿主变量,数目、,输入宿主变量类型,的,情况,,,例如,:,SELECT DEPTNO,MIN(SAL),MAX(SAL)FROM EMP GROUP BY DEPTNO,SELECT ENAME,EMPNO FROM EMP WHERE DEPTNO=:dept_number,方法3,同,方法2,比较相像,只是,PREPARE,关联,的,语句需要,管理和,定义,游标。,必须知道,表,/,视图,名、列名,而,不能通过占位符,号用,宿主变量代替,。,2024/10/3,16,Tiger.Wang,Email:W MSN:W,方法,3,(2),对,顺序,游标,动态查询处理逻辑,用,语句描述如下,:,PREPARE statement_name FROM :host_string|string_literal;,DECLARE cursor_name CURSOR FOR statement_name;,OPEN cursor_name USING host_variable_list;,FETCH cu
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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