合工大数据库课件_第1页
合工大数据库课件_第2页
合工大数据库课件_第3页
合工大数据库课件_第4页
合工大数据库课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第八讲数据库编程沈明玉数据库编程一、嵌入式SQL二、PL/SQL与Transact-SQL三、存储过程四、事务的概念与使用数据库编程一、嵌入式SQL嵌入式SQL什么是嵌入式SQL?

交互式SQL和嵌入式SQL是SQL的两种使用方法。当一个程序既要访问数据库,又要处理数据时,将SQL语言嵌入到程序设计语言(宿主语言)中,将SQL语言访问数据库的功能和宿主语言的数据处理功能相结合,这种使用SQL的方法称为嵌入式SQL。嵌入式SQL(续)如何实现嵌入式SQL?宿主语言的编译器不能识别SQL,如何将嵌有SQL语句的宿主语言编译成可执行代码?宿主语言与DBMS之间如何传递数据和信息?如何解决元组集合数据对宿主语言变量的赋值?在宿主语言中标注SQL语句的方法用EXECSQL前缀来标识SQL语句,以区分宿主语言与SQL语言。嵌入式SQL(续)嵌入式SQL的处理过程嵌入式SQL(续)宿主语言与DBMS之间如何通信?SQL通信区(SQLCA)SQLCA是一个数据结构SQLCA的用途描述系统当前工作状态描述运行环境SQLCA使用方法定义SQLCA:ExecSQLIncludeSQLCA使用SQLCA:变量SQLCODE,为0-执行成功,否则表示出错。嵌入式SQL(续)共享变量(主变量)宿主语言与SQL语言之间通过共享变量进行数据传送;共享变量由宿主语言程序定义,用SQL的Declare说明后可在SQL语句中引用(引用时需加':'号,以区分数据库自身的变量,如:属性)。嵌入式SQL(续)嵌入式SQL的实现方法说明部分定义共享变量、环境变量、游标等。ExecSQLBeginDeclareSection;charsno[10],sname[20];intsage;ExecSQLEndDeclareSection;嵌入式SQL(续)执行部分:各种SQL语句的执行ExecSQLInsertintoStudents(sno,sname,sage)values(:sno,:sname,:sage);ExecSQLUpdateStudentsSETsname=:sname,sage=:sageWheresno=:sno;ExecSQLDeletefromSCWheresno=(SelectsnofromStudentWheresno=:sno);ExecSQLSelectsname,sageinto:sname,:sagefromStudentsWheresno=:sno;嵌入式SQL(续)使用游标(cursor)的SQL编程解决多对一的问题!说明游标语句:ExecSQLDeclare<游标名>CursorforSelect…from…Where…;打开游标语句:ExecSQLOpen<游标名>;推进游标语句:ExecSQLFetch<游标名>into<变量表>;关闭游标语句:ExecSQLClose<游标名>;嵌入式SQL(续)建立数据库连接

ExecSQLConnectTOtarget[ASconnection-name][Useruser-name];

target是要连接的数据库服务器:常见的服务器标识串,如<dbname>@<hostname>:<port>connect-name是可选的连接名,连接必须是一个有效的标识符在整个程序内只有一个连接时可以不指定连接名。嵌入式SQL(续)关闭数据库连接

ExecSQLDisconnect[connection];程序运行过程中可以修改当前连接 ExecSQLSetConnectionconnection-name|DEFAULT;嵌入式SQL(续)[例]依次检查某个系的学生记录,交互式更新某些学生年龄。EXECSQLBEGINDECLARESECTION;/*主变量说明开始*/ chardeptname[64]; charHSno[64]; charHSname[64]; charHSsex[64]; int HSage; int NEWAGE;EXECSQLENDDECLARESECTION;/*主变量说明结束*/longSQLCODE;EXECSQLINCLUDEsqlca;/*定义SQL通信区*/嵌入式SQL(续)intmain(void)/*C语言主程序开始*/{ int count=0; charyn;/*变量yn代表yes或no*/ printf("Pleasechoosethedepartmentname(CS/MA/IS):"); scanf("%s",deptname);/*为主变量deptname赋值*/ EXECSQLCONNECTTOTEST@localhost:54321USER"SYSTEM"/"MANAGER";/*连接数据库TEST*/ EXECSQLDECLARESXCURSORFOR/*定义游标*/ SELECTSno,Sname,Ssex,Sage/*SX对应语句的执行结果*/ FROMStudent WHERESDept=:deptname; EXECSQLOPENSX;/*打开游标SX便指向查询结果的第一行*/嵌入式SQL(续)for(;;) /*用循环结构逐条处理结果集中的记录*/{ EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage; /*推进游标,将当前数据放入主变量*/ if(sqlca.sqlcode!=0)/*sqlcode!=0,表示操作不成功*/ break; /*利用SQLCA中的状态信息决定何时退出循环*/ if(count++==0)/*如果是第一行的话,先打出行头*/ printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex","Sage"); printf("%-10s%-20s%-10s%-10d\n",HSno,HSname,HSsex,HSage); /*打印查询结果*/ printf("UPDATEAGE(y/n)?");/*询问用户是否要更新该学生的年龄*/ do{ scanf("%c",&yn); }while(yn!='N'&&yn!='n'&&yn!='Y'&&yn!='y');嵌入式SQL(续) if(yn=='y'||yn=='Y')/*如果选择更新操作*/ { printf("INPUTNEWAGE:"); scanf("%d",&NEWAGE);/*用户输入新年龄到主变量中*/ EXECSQLUPDATEStudent /*嵌入式SQL*/ SETSage=:NEWAGEWHERECURRENTOFSX; }/*对当前游标指向的学生年龄进行更新*/}EXECSQLCLOSESX;/*关闭游标SX不再和查询结果对应*/ EXECSQLCOMMITWORK;/*提交更新*/ EXECSQLDISCONNECTTEST;/*断开数据库连接*/}数据库编程二、PL/SQL与Transact-SQLPL/SQL与Transact-SQLPL/SQLPL/SQL是Oracle对标准SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,可使用循环、分支和嵌套,将SQL的数据操纵功能与过程化语言数据处理功能相结合。PL/SQL与Transact-SQL(续)PL/SQL的作用能够使一组SQL语句的功能更具模块化程序特点;采用了过程性语言控制程序的结构;可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断;具有较好的可移植性,可以移植到另一个Oracle数据库中;集成在数据库中,调用更快;减少了网络的交互,有助于提高程序性能。PL/SQL与Transact-SQL(续)PL/SQL程序的基本结构DECLARE—可选部分变量、常量、游标、用户定义异常的声明……BEGIN—必要部分SQL语句和PL/SQL语句构成的执行程序……EXCEPTION—可选部分程序出现异常时,捕捉异常并处理异常……END;—必须部分PL/SQL与Transact-SQL(续)PL/SQL的变量简单变量格式:变量名[constant]变量类型[notnull][default值|:=值]v_namevarchar2(10);v_ageconstantnumber:=20;v_sexchar(2)default'男';

PL/SQL与Transact-SQL(续)复合变量布尔类型:v_tfboolean;type类型:

v_snostudents.sno%type;rowtype类型:v_scsc%rowtype;(使用:v_sc.sno)PL/SQL与Transact-SQL(续)PL/SQL的语句赋值语句:变量名称:=表达式v_sno:='20090080';条件语句:IF-THEN,IF-THEN-ELSE和嵌套的IF语句IF(new.Job=‘讲师')AND(new.Sal<3000)THENnew.Sal:=3000;ENDIF;

PL/SQL与Transact-SQL(续)分支语句:Casewhen条件表达式1then……when条件表达式nthen……else……Endcase;PL/SQL与Transact-SQL(续)11循环语句:基本loop循环Loop语句1;语句2;……exit[when条件];Endloop;PL/SQL与Transact-SQL(续)Forloop循环:For控制变量in[reverse]下限..上限loop语句1;……语句n;Endloop;PL/SQL与Transact-SQL(续)Whileloop循环:While条件loop语句1;……语句n;Endloop;PL/SQL与Transact-SQL(续)异常处理

EXCEPTION

WHENexception_nameTHEN

Codeforhandingexception_name;

[WHENanother_exceptionTHEN

Codeforhandinganother_exception];

[W

温馨提示

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

评论

0/150

提交评论