首页 《roC程序设计》PPT课件

《roC程序设计》PPT课件

举报
开通vip

《roC程序设计》PPT课件Pro*C程序设计TigerConsultationStudio精选PPT目录Pro*C概述Pro*C基础知识事务处理动态SQL技术总结精选PPT动态SQL技术动态SQL编程是Pro*C/C++中一种比较高级的编程方法,它增强了应用程序的灵活性和可扩展性,运行应用程序在运行状态时动态组织SQL语句并执行和处理执行结果。Oracle支持如下两种动态SQL语句标准动态SQL语句Oracle高级动态SQL语句Oracle动态SQL不支持以下列表的数据类型:CURSOR类型结构数组(arraysofstruct)DML语句...

《roC程序设计》PPT课件
Pro*C程序设计TigerConsultationStudio精选PPT目录Pro*C概述Pro*C基础知识事务处理动态SQL技术总结精选PPT动态SQL技术动态SQL编程是Pro*C/C++中一种比较高级的编程方法,它增强了应用程序的灵活性和可扩展性,运行应用程序在运行状态时动态组织SQL语句并执行和处理执行结果。Oracle支持如下两种动态SQL语句 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 动态SQL语句Oracle高级动态SQL语句Oracle动态SQL不支持以下列表的数据类型:CURSOR类型结构数组(arraysofstruct)DML语句的返回子句(returning)Unicode变量LOBS类型精选PPT动态SQL含义动态SQL就是在应用程序执行期间组织、准备、执行SQL语句的方法和技术。在一些应用程序中需要根据业务逻辑特点接收应用程序外部传输过来的变量,在运行时决定执行什么结构的SQL语句,例如:根据用户输入的表名,删除该表对应的数据,由于SQL变量在静态SQL语句时不能应用到DELETE表名位置的,所以没有办法在执行过程中通过静态SQL语句完成这样的功能。而动态SQL语句则可以接受用户输入,动态的组织SQL语句,完成上述要求。精选PPT动态SQL的优缺点优点:增强应用程序灵活性增强应用程序扩展性完成静态SQL所不能完成的工作缺点:编码相对复杂执行效率没有静态SQL好精选PPT动态SQL适用环境在应用程序执行时,如果以下元素在编写代码时不确定就需要使用动态SQL:SQL语句书写方式SQL变量/宿主变量数目SQL变量/宿主变量数据类型未知Oracle数据库Objects(表、视图、索引、列等)属性精选PPT动态SQL执行条件(1)无论如何执行动态SQL语句,都需要一个包含有效的SQL语句(不包括EXECSQL语句)、或下面嵌入式SQL指令的字符串:ALLOCATECLOSEDECLAREDESCRIBEEXECUTEFETCHFREEGETINCLUDEOPENPREPARESETWHENEVER精选PPT动态SQL执行条件(2)嵌入式SQL指令的字符串中,通常包含假的宿主变量这些假的宿主变量只为告诉预处理器在该位置需要进行变量替换这些假宿主变量不需要声明,可以采用任意命名方式如下两个语句对动态SQL来说是完全一样的,尽管有“:mgr_number、:job_title”和“:m、:j”在样式上的区别,这些假宿主变量通常称为占位符号。“DELETEFROMEMPWHEREMGR=:mgr_numberANDJOB=:job_title”“DELETEFROMEMPWHEREMGR=:mANDJOB=:j”精选PPT动态语句执行过程通常一个应用程序提示用户输入SQL语句组成要素到宿主变量中应用程序根据宿主变量值组织SQL语句提交SQL语句到Oracle数据库服务器进行语法检查Oracle绑定(bind)宿主变量到准备好的SQL语句中,此时Oracle得到宿主变量的地址,以能对变量内容进行读写Oracle执行(execute)准备好的SQL语句随着宿主变量的变化,Oracle可以重复执行这条SQL语句。精选PPT使用动态SQL的方法方法1:无SQL变量的非查询语句方法2:已知输入变量个数的非查询语句方法3:已知SELECT语句选取列和输入宿主变量个数的查询语句方法4:未知SELECT语句选取列或输入宿主变量个数的查询语句也适用于未知列名列表和输入宿主变量的其他DML语句,只是其他语句处理比SELECT查询定义游标要简单精选PPT方法1:无SQL变量的非查询语句应用程序接收外界输入构造SQL语句到一个字符串然后调用EXECUTEIMMEDIATE命令执行这个SQL语句这种SQL语句不能为SELECT语句,不能包含输入变量的占位符。例如:’DELETEFROMEMPWHEREDEPTNO=20’’GRANTSELECTONEMPTOscott’缺点此种方法每执行一次SQL语句,数据库都需要解析一遍SQL语句所以这种方法只适合运行一次或少数几次,否则严重影响应用程序效率。EXECUTEIMMEDIATE命令的语法为:EXECSQLEXECUTEIMMEDIATE{:host_string|string_literal};精选PPT方法1:代码示例chardynstmt1[10];VARCHARdynstmt2[80];……EXECSQLEXECUTEIMMEDIATE"CREATETABLEdyn1(col1VARCHAR2(4))";strncpy(dynstmt1,"COMMIT",10);EXECSQLEXECUTEIMMEDIATE:dynstmt1;strcpy(dynstmt2.arr,"DROPTABLEDYN1“);dynstmt2.len=strlen(dynstmt2.arr);EXECSQLEXECUTEIMMEDIATE:dynstmt2;EXECSQLCOMMITRELEASE;精选PPT方法2:已知输入变量个数的非查询语句应用程序接受或组建一个SQL语句,并通过PREPARE和EXECUTE语句执行这个SQL,不能是查询语句。为输入宿主变量准备的占位符数目和输入宿主变量的类型必须已知,例如:’INSERTINTOEMP(ENAME,JOB)VALUES(:emp_name,:job_title)’’DELETEFROMEMPWHEREEMPNO=:emp_number’对方法2来说,SQL语句只在PREPARE时解析一次,以后可以执行多次,并随输入宿主变量的不同而执行结果不同。对于数据定义语句(DDLSQL)语句,例如CREATE和GRANT,随PREPARE语句执行。精选PPT方法2:已知输入变量个数的非查询语句PREPARE语法格式如下:EXECSQLPREPAREstatement_nameFROM{:host_string|string_literal};PREPARE语句解析host_string宿主变量对应的SQL语句,并指定一个语句名称statement_name,语句名称不是一个宿主变量,不需要声明,只是一个编译标识。EXECUTE语法格式如下:EXECSQLEXECUTEstatement_name[USINGhost_variable_list];其中host_variable_list格式如下::host_variable1[:indicator1][,host_variable2[:indicator2],...]EXECUTE通过USING子句读取输入的宿主变量,执行经过PREPARE解析过的SQL语句statement_name。USING子句中如果一个是数组宿主变量,USING子句中的宿主变量必须全是数组类型。精选PPT方法2:代码示例VARCHARdynstmt[80];intempno=1234,deptno1=97,i=0;strcpy(dynstmt.arr,"INSERTINTOEMP(EMPNO,DEPTNO)VALUES(:v1,:v2)");dynstmt.len=strlen(dynstmt.arr);EXECSQLPREPAREsql_statementFROM:dynstmt;For(i=0;i)VALUES()’’SELECTFROMEMPWHEREDEPTNO=20’一个描述字(descriptor)是一块描述用于在应用程序和Oracle数据库间执行动态SQL所需变量信息的内存区域。精选PPT方法4(2)为了满足这中情况下的动态查询,应用程序必须使用DESCRIBESELECTLIST命令,并且需要声明一个SQLDecriptorArea(SQLDA)类型的数据结构,使用这个结构来保存SELECT选择的列信息,这个结构也被称作检索描述字(SELECTDESCRIPTOR)。如果应用程序同时有多个活动的SQL语句,每一个活动的SQL语句必须有它自己的SQLDA。如果动态SQL语句包含一个未知的输入宿主变量列表(host-variablelist),则不能使用USING子句完成宿主变量值的传入。在这种情况下,应用程序必须执行DESCRIBEBINDVARIABLES语句,并声明被称为绑定描述字(BINDDESCRIPTOR)的另一SQLDA种类变量,用于保存输入宿主变量所需占位符信息。精选PPTDESCRIBE语句DESCRIBE语句初始化一个描述字,用于保存select-list列信息或输入宿主变量信息。如果指定了一个检索描述字,DESCRIBESELECTLIST语句检查PREPARE语句中的动态查询语句的SELECT-LIST列信息,得到列的名称、列的类型、约束、长度、精度信息,并存储这些信息到检索描述字。如果指定了一个绑定描述字,DESCRIBEBINDVARIABLES检查PREPARE语句中的占位符号,将信息存储在绑定描述字中供后续程序使用。精选PPTSQLDA(1)SQLDA是用来保存SELECT-LIST列信息或输入宿主变量信息的数据结构。SQLDA变量不能在DECLARESECTION段中定义。SQLDA变量包含下面SELECT-LIST列信息:能被DESCRIBE的列的最大数量能被DESCRIBE的列的真实数量存储列值缓冲区的地址列值的长度列值的数据类型指示变量值的地址存储列名的缓冲区的地址存储列名的缓冲区的长度列名称的当前长度精选PPTSQLDA(2)SQLDA变量包含在一个动态SQL语句中所需要的输入宿主变量的信息:能被DESCRIBE的占位符最大数量能被DESCRIBE的占位符的真实数量输入宿主变量的地址输入宿主变量的长度输入宿主变量的数据类型指示变量的地址存储占位符名称的缓冲区的地址存储占位符名称的缓冲区的长度当前占位符名称的长度存储指示变量名的缓冲区地址存储指示变量名的缓冲区的长度当前指变量名的长度精选PPT处理过程描述EXECSQLPREPAREstatement_nameFROM{:host_string|string_literal};EXECSQLDECLAREcursor_nameCURSORFORstatement_name;EXECSQLDESCRIBEBINDVARIABLESFORstatement_nameINTObind_descriptor_name;EXECSQLOPENcursor_name[USINGDESCRIPTORbind_descriptor_name];EXECSQLDESCRIBE[SELECTLISTFOR]statement_nameINTOselect_descriptor_name;EXECSQLFETCHcursor_nameUSINGDESCRIPTORselect_descriptor_name;EXECSQLCLOSEcursor_name;精选PPT使用SQLDA变量SQLDA结构定义在sqlda.h头文件中,通常应用程序需要通过指针应用SQLDA变量需要定义一个指向检索描述字(SELECTDESCRIPTOR)的指针或一个指向绑定描述字(BINDDESCRIPTOR)的指针#includeSQLDA*bind_dp;SQLDA*select_dp;然后通过使用SQLSQLDAAlloc函数(Oracle8之前的sqlaldt函数)进行所需空间的分配。bind_dp=SQLSQLDAAlloc(runtime_context,size,name_length,ind_name_length);当应用程序为非多线程时,runtime_context采用SQL_SINGLE_RCTX代替((dvoid*)0)。精选PPTSQLSQLDAAlloc函数SQLSQLDAAlloc函数的参数含义如下:SQLSQLDAAlloc(runtime_context,max_vars,max_name,max_ind_name);runtime_context指向运行环境的指针max_vars最大能DESCRIBE的SELECT-LIST列和占位符号的数目max_name占位符和SELECT-LIST列名称的最大长度max_ind_name最大指示变量长度,这个参数只用于分配绑定描述字(BINDDESCRIPTOR)空间,对分配检索描述字(SELECTDESCRIPTOR)空间时,赋0即可精选PPTSQLDA结构structSQLDA{longN;/*Descriptorsizeinnumberofentries*/char**V;/*PtrtoArrofaddressesofmainvariables*/long*L;/*PtrtoArroflengthsofbuffers*/short*T;/*PtrtoArroftypesofbuffers*/short**I;/*PtrtoArrofaddressesofindicatorvars*/longF;/*NumberofvariablesfoundbyDESCRIBE*/char**S;/*PtrtoArrofvariablenamepointers*/short*M;/*PtrtoArrofmaxlengthsofvar.names*/short*C;/*PtrtoArrofcurrentlengthsofvar.names*/char**X;/*PtrtoArrofind.var.namepointers*/short*Y;/*PtrtoArrofmaxlengthsofind.var.names*/short*Z;/*PtrtoArrofcurlengthsofind.var.names*/};精选PPTSQLDA结构成员描述(1)NSELECT-LIST列或占位符的最大数量,执行DESCRIBE前必须执行SQLSQLDAAlloc()函数给N进行赋值,设定描述数组的维数,其决定了描述字结构成员数组的最大元素个数。在DESCRIBE命令后,必须将存储在F中的变量真实个数赋值给N。V是一个指向一个地址数组的指针,在该数组中存储SELECT-LIST列值或绑定变量的值。当使用SQLSQLDAAlloc函数时,系统给V[0]到V[n-]赋值为0。在使用selectdescriptors时,必须在FETCH语句前,给V指针数组分配内存空间,应为下列语句要用到两种描述字具体的值:EXECSQLFETCH...USING‘selectdescriptors’对于binddescriptors,必须在OPEN语句前分配空间EXECSQLOPEN...USING‘binddescriptors’精选PPTSQLDA结构成员描述(2)LL是一个指向存放select-list或bind-variable变量值长度数组的指针。对于selectdescriptors,DESCRIBESELECTLIST语句设置数组中各元素的值,对不在select-list的对应长度设置成该类型的可的定义的最大长度。在FETCH语句前,用户可能需要重新修改变量长度,比如为了显示原因,需要将NUMBER类型数据存储到C语言char[]类型,就需要通过SQLNumberPrecV6()函数得到NUMBER长度,然后转换成字符串后的真实长度。对于binddescriptors,用户必须在OPEN语句前,给数组成员赋对应V变量成员长度的值。因为Oracle间接的通过使用存储在V[i]变量的地址访问数据区域,如果不指定L[i]变量,就不能得到V[i]的存储数据的长度,也就不能得到或给V[i]指定的数据区域赋值。如果用户需要更改V[i]指定数据区域的长度,只需简单更改L[i]的值即可。精选PPTSQLDA结构成员描述(3)TT时指向一个数组的指针,在这个数组中存放这select-list或者bind-variable的数据类型。这个成员决定了Oracle数据存储到V数组中时如何进行转换。对于selectdescriptors,DESCRIBESELECTLIST语句设置数据类型数组值为Oracle内部数据类型(char,number或date等)。在进行FETCH前,用户可能需要重新更改此数组某元素的值,因为Oracle内部数据类型很难被C语言所采用。通常为了对select-list对应的selectdescriptors数据进行显示,需要将数据类型转换成varchar2或STRING类型。T[i]的高位用来指示其对应的select-list列值的“NULL/NOTNULL”状态。在使用OPEN或FETCH语句前,需要调用SQLColumnNullCheck()接受T[i]数据类型值,并清空高位NULL/NOTNULL状态。对于binddescriptors,DESCRIBEBINDVARIABLES设置数据类型数组的各元素值为0。用户必须在OPEN命令前设置各输入宿主变量的数据类型。变量类型值采用Oracle外部数据类型描述。通常,绑定变量值存储在字符串数组中,其对应的T[i]就设置为1(Varchar2)或者5(STRING)。精选PPTSQLDA结构成员描述(4)I一个指向存储指示变量值数组的指针。对于selectdescriptors,在FETCH语句前必须设置I数组各元素所指向的地址。EXECSQLFETCH...USING‘selectdescriptor’如果第i个select-list对应列值为空,则I[i]值为-1否则是个>=0的整数。对于binddescriptors,须在OPEN语句前设置I数组各变量的值EXECSQLOPEN...USING‘binddescriptor’F存放通过DESCRIBE语句得到的select-list或占位符的真实数目,如果经过DESCRIBE语句后F小于零表示DESCRIBE语句发现的select-list数目或占位符数目比分配描述符时指定的最大数据数目N大,例如,如果设置N=10但DESCRIBE发现select-list的数目是11个,那么F将被设置成-11,这允许用户根据此值重新调用SQLSQLDAAlloc函数分配大的描述符存储区域。精选PPTSQLDA结构成员描述(5)S指向一个数组的指针,该数组存储select-list或占位符的名字。M指向一个数组的指针,该数组存储了select-list或占位符名字的最大长度。C指向一个数组的指针,该数组存储了select-list或占位符名字的当前长度。X指向一个存储指示变量名字数组的指针。Y指向一个存储指示变量名字最大长度数组的指针。Z指向一个存储指示变量名称当前长度数组的指针。精选PPT转换数据类型在之前的应用程序中,预编译时对Oracle内部和外部数据类型进行自动转换。在DECLARESECTION变量声明语句段,预编译程序自动的将宿主变量类型转换成等值的Oracle外部数据类型,如自动将int类型的宿主变量转换成Oracle外部数据类型NUMBER。在方法4中,用户可能需要人为的控制数据类型转换,然后将转换后的类型设置给SQLDA的T数组变量。Oracle内部数据类型指定了数据在Oracle数据库中的存储格式,当使用DESCRIBESELECTLIST命令时,Oracle返回select-list各列的内部数据类型存储到SQLDA的T变量,如第n个select-list成员的数据类型被存储到T[n]。精选PPT基本 步骤 新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤 (1)1.在DECLARESECITON段声明一个存放动态SQL语句的字符串变量2.定义用于selcet-list和bind-varibales的SQLDA变量描述字3.为检索描述字(selectdescriptor)和绑定描述字(binddescriptor)分配空间4.设置描述字中select-list列和bindvariables的最大数量5.给第一步定义的字符串宿主变量赋值SQL语句6.根据存放SQL语句的字符串宿主变量进行PREPARE7.为查询DECLARE一个游标8.DESCRIBE绑定变量到绑定描述符9.重置绑定游标中最大占位符数目为DESCRIBE实际得到的占位符数目精选PPT基本步骤(2)10.得到绑定变量值,并给DESCRIBE发现的绑定变量分配存储空间11.通过USING绑定描述符调用OPEN打开游标12.DESCRIBEselect-list到检索描述字(selectdescriptor)13.重置检索描述字中select-list实际选取的列数14.因为显示原因,重置描述字中对应select-list变量的类型和长度15.调用FETCH,从数据中读取数据到检索描述字指向的内存区域16.继续FETCH到记录集结束17.释放空间18.关闭游标精选PPTSQL语句描述(1)普通顺序游标EXECSQLPREPAREstatement_nameFROM{:host_string|string_literal};EXECSQLDECLAREcursor_nameCURSORFORstatement_name;EXECSQLDESCRIBEBINDVARIABLESFORstatement_nameINTObind_descriptor_name;EXECSQLOPENcursor_name[USINGDESCRIPTORbind_descriptor_name];EXECSQLDESCRIBE[SELECTLISTFOR]statement_nameINTOselect_descriptor_name;EXECSQLFETCHcursor_nameUSINGDESCRIPTORselect_descriptor_name;EXECSQLCLOSEcursor_name;精选PPTSQL语句描述(2)动态滚动游标EXECSQLPREPAREstatement_nameFROM{:host_string|string_literal};EXECSQLDECLAREcursor_nameSCROLLCURSORFORstatement_name;EXECSQLDESCRIBEBINDVARIABLESFORstatement_nameINTObind_descriptor_name;EXECSQLOPENcusor_name[USINGDESCRIPTORbind_descriptor_name];EXECSQLDESCRIBE[SELECTLISTFOR]statement_nameINTOselect_descriptor_name;EXECSQLFETCH[FIRST|PRIOR|NEXT|LAST|CURRENT|RELATIVEfetch_offset|ABSOLUTEfetch_offset]cursor_nameUSINGDESCRIPTORselect_descriptor_name;EXECSQLCLOSEcursor_name;精选PPT标准动态SQL标准动态SQL(SQL92动态SQL语句),可以用于增强方法4。上面关于方法4的实现办法不支持Object、LOB、cursor、结构数组、DMLreturning字句数据类型,但标准动态SQL支持Oracle所有数据类型。设置预编译选项DYNAMIC值为ANSI,或者设置MODE为ANSI,可以使编译器按照标准动态SQL语法对源程序进行预编译,否则将按照ORACLE模式。如果为了兼容其他支持标准动态SQL的数据库,设置TYPE_CODE为ANSI。精选PPT标准动态SQL语句步骤声明一个字符串变量X,用于存放需要动态执行的SQL语句为输入变量和输出变量分配描述字Prepare动态执行的语句XDescribe输入和输出描述字设置输入描述字的值声明并打开一个动态游标设置输出描述字重复的fetch数据,使用GETDESCRIPTOR接受输出变量(enmae,empno)的值关闭动态游标,释放输入输出描述字精选PPT谢谢!精选PPT
本文档为【《roC程序设计》PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
爱赢
公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)
格式:ppt
大小:126KB
软件:PowerPoint
页数:0
分类:教育学
上传时间:2021-02-19
浏览量:1