PowerBuilder中动态SQL语句的应用

  • 格式:pdf
  • 大小:104.02 KB
  • 文档页数:2

科技笛J-L o教学研究O SCIENCE INFORMATION 2006年第5期 

PowerBuilder中动态SQL语句的应用 祝明慧’张艳丽。 (1、沧州师范专科学校河北沧州061001:2、沧州市第八中学河北沧州061001) 摘要:介绍了在PowerBunder中四种类型的动态SQL语句所能实现的功能,并给出了相应的实例。 关键词:PowerBuilder;动态SQL;嵌入式SOL InPowerBuiMerdynamicSQL sentence appHcaflon ZHUMhlg—hml ZHANGYtm- ̄ (1.Computer De_卿岫蚰t of cn#m Teacher’s C0IIege,c锄唱zhou 061001,Hebei;2.c锄唱zhoII eighth mkklle sezml, ̄061001,Flebei;) Abstract:Introduced four types dynamic SOL sentence could reMize the function in PowerBuilder,and produced the eonesponding example. Keywords:PowerBunder:Dynanlic SQL;Embedded SQL 一、概述 PowerBuilder ̄持嵌入式SQL语句操纵数据库,但这种方法并不 能解决所有数据库访问问题。比如:使用它们不能根据需要创建表或 删除表.也难以处理动态生成的sELECT语句,另外,可能在开发时无 法确定输入输出的参数。在这些情况下就可以使用动态SQL语句,它 可以在程序运行时生成SQL的格式。 二、应用 动态SQL有四种类型,每种类型都有自己不同的特点和作用,下 面我们分别对这四种类型的使用方法加以分析说明。 (一)类型一 I.语法 EXECU IE IMMEDIA IE SQLStatement fUSING TransactlonObjectl; .其中s0LStatement是个字符串,其内容为有效的SQL语句; TransactionObject是事务对象名。大括号表示该字句可以省略,省略时 使用SQLCA。该类型的动态SQL通常用于执行数据操作语句(例如定 义表、删除表等)以及某数据库特有的sOL语句。 2.实例: 建立一张数据库表(employee)。 String mysql Mysql=”create table employee”& +”(emp_id integer not nul1.”& +”e3np_le char(Io)nul1.”& +’’emp_sex char(2)nun)” EXECUTE IMMEDIATE mysql; 注意:在给出的SQL语句串的结束位置不能加“;”号。 (二)类型二 当执行带输入参数但没有返回结果集时的SQL语句可以采用第 二种格式。该格式不仅可以动态地指定要执行的SQL语句,同时还可 以动态地确定SQL语句所需要的参数值。 1.语法 PREPARE DynamicStagingArea FROM SQLStatement fUSING TransactionObjectl; EXECUTE Dynamics ̄ingArea USING fParameterlistl; 其中DymIIlicshIgin 是PowerBuilder提供的一种数据类型。 PowerBuilder本身提供了一个名为SQLSA的DynamiestaglngArea类型 的全局变量,用于保存要执行的动态SQL语句信息。 2.实例 . 删除编号为56的雇员信息。 Int code=56 PREPAREsOLSAFROM“deletefrom employeewhere emp_id=?”; EXECUTE SQLSA USING code; (三)类型三 第三类的作用是处理有输入参数并且返回结果集的格式在编译 时可以确定的SQL语句.p这种格式语法比较复杂,但要比前面两种功 能强。可以返回结果集。它有两种形式:使用游标和使用存储过程。其 区别在于游标处理时使用OPEN语句而不使用EXECUrIE,而运用存 储过程时则使用EXECU IE语句但不使用OPEN语句。下面一并给出 第三类动态SQL的语法。其中cursor针对游标,procedure针对存储过 程。 I.语法 DECLARE cursor l procedure DYNAMIC CURS0Rl procedure FOR DynamicStagingArea;PREPARE DynamieStagingArea FROM SQLStatement{USING TransactionObject};OPEN DYNAMIC cun蚶 fUSING Parameterlist}; EXECUTE DYNAMIC procedure fUSING Parameter1ist}; FETCH cursorl procedure IN r0 Variable st: CLOSE cursorl procedure; 2.实例 得到姓名是王名的雇员。 DECLARE my_cursor DYNAMIC CURS0R FOR sOLSA; Int code String n ̄ffle=”王名” ’ String mysql Mysql=”select emp_id from employee where emp_name=?” PREPAREsOLSAFR0M:mysql; OPEN DYNAMIC my_cumorUSING:frame; Fetch my_cumor INTO:code; Do while sqlca.sqlcode=0 ,,对满足条件的记录根据要求分别进行处理 Fetch my_cursur IN ID:code; Loop Closemy_cursor; (四)类型四 第四类动态SQL语句最复杂,功能也最强,它能够处理编程时尚 不知道参数和结果集的SQL语句。与第三类动态SQL相似,第四种动 态SQL语句也有两种形式,一种针对游标处理,另一种则针对存储过 程而言。其区别在于游标处理时使用OPEN语句而不使用EXECUTE, 而运用存储过程时则使用EXECUTE语句但不使用OPEN语句。 1.语法 DECLARE CUl ̄Orl procedure DYNAMIC CURS0RlPROCEDURE F0R DynamicStagingArea; PREPARE DynamicStagingArea FROM SQLStatement 

l75 维普资讯 http://www.cqvip.com 科技信息 。教学研究o SCIENCE INFORMATION 2006年第5期 

{USING TransactionObjectl; DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea; 0PEN DYNAMIC cursor USING DESCRIPTOR DynamicDescriptionArea; EXECUTE DYNAMIC procedure USING DESCRIPI10R DynamieDescfiptionArea: FETCH cursorIproeedure USING DESCRIPTOR DynamieDeseriptionArea; CL0SE CUrSOr I procedure: 其中:DynamicDeseriptionArea是PowerBuilder提供的一个数据类 型,在PowerBuilder中提供了一个名字为SQLDA的 DynamicDeseriptionArea类型的全局变量.用来存放动态SQL语句的 输入输出参数。 2.实例 将一个表中满足过滤条件的记录的所有字段取出来分别进行处 理,表名在程序运行中由字符串变量传递,字段信息是不确定的。这里 我们假设通过字符串变量中传递的表名是employee。 string lsstring,mysql,lstable,lscolum int intvar mysql=”select from employee where emp_id like?” PREPA肛SQLSA FROM mysql; DESCRIBE SQLSA INTO SQLDA: DECLARE cursor_employee DYNAMIC CURS0R FOR SQLSA; SQLDA.SetDynamieparm(1,”21%”) OPEN DYNAMIC cursor.employee USING DESCRImR SQLDA; FE rCH CUrSOr employee USING DESCRIPTOR SQLDA; Do while SQLCA.SQLCODE=0 FOR intvar=-I to SQLDA.Numoutputs CHOOSE CASE sqlda.outparmtype[intvar] CASE Typestring! Lsstring=getdynamiestring(SQLDA.intvar) CASE Typeinteger! Lsstring=getdynamienumber(SQLDA,intvar)END CHOOSE Next FE1℃H cursor.employee USING DESCRIPTOR SQLDA; LO0P CLOSE cursor employee: 三、结束语 从上面的说明和举例中可以看出动态SQL的特点是功能强,使 用灵活.完全可以在程序代码中动态地生成具体要执行的SQL语句, 是嵌入式SQL无法比拟的。正确使用动态SQL语句可使程序代码简 练、灵活、通用,能够取得事半功倍的效果。盛 参考文献 [1]{PowerBuilder 6.5参考手册》清华大学出版社,1999年. [2]吴洁明(PowerBuilder 6.0应用与开发》清华大学出版社,1998年 作者简介:祝明慧,女,生于1978.9,汉,河北沧州河间人,2000年 毕业于河北经贸大学计算机及应用专业,本科,学士学位。现在沧州师 专计算机系任助教。 张艳丽,女,生于1978.7蒙古族,河北沧州人,2003年毕业于河北 师范大学中文系汉语言文学教育专业,本科,学士学位,现在沧州市第 八中学任教。 

176 f上接第206页) 『SO 【0,0.05 J] l so2 10,0.1 5】f l SO 【0,0.25】i Rl=lPM。o【o,0.o5】l R2=l PM—o【o,0.151 l Rl:l PM。o【o,0.25】l 【NO2[0,0・o8J J f NO 【o,0.o8】f f NO 【o,0.12】f 3.3计算污染物的权重用等标指数法计算I级、Ⅱ级、Ⅲ级大 气质量中各污染物指标的权重。等标指数计算公式为一一 wO,j)=Qi/S(id)(i=l,2,3A;j=I,2,3).式中,Qi为第i个污染指标监测 值的平均值;S(ij)为第j级大气质量第i个污染指标的标准值。各级大 气质量中各指标的归一化权重如表2所示 表2各级大气质量中污染指标的权重