spl语言说明教程
《PLSQL经典教程》课件

PLSQL变量与常量
了解如何定义和使用变量以及常量,实现 数据存储和常量值的复用。
PLSQL条件语句
学习使用条件语句(IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF)控制程序的执行流程。
PLSQL循环语句
掌握使用循环语句(LOOP, WHILE, FOR) 实现重复执行某一段代码的功能。
《PLSQL经典教程》PPT课 件
本课程旨在介绍PLSQL编程的基础知识和技能。通过本课程,您将全面了解 PLSQL语言的特点和高级应用,提升自己的编程能力。
简介
本课程为PLSQL经典教程PPT课件,旨在介绍PLSQL编程基础知识和技能。
第一章:PLSQL基础
PLSQL简介
PLSQL是Oracle数据库的编程语言,具有丰 富的数据处理和逻辑控制功能。
强制执行。
结束语
感谢您的耐心学习!希望本课程能对您的PLSQL编程有所帮助。
第二章:PLSQL高级应用
1
PLSQL异常处理
学习如何编写异常处理程序以及如
PLSQL游标
2
何定义和抛出异常。
了解如何定义、使用和操作游标,
处理和管理查询结果集。来自3PLSQL存储过程
学习如何定义和使用存储过程,提
PLSQL触发器
4
高编程的模块化和代码复用性。
掌握如何定义和使用触发器,实现 数据库操作的自动化和业务规则的
SPL快速入门

SmartPersistenceLayer 3 快速入门前言SmartPersistenceLayer(SPL)自在博客园发布开始,就一直受到广大朋友的认可,那一套SPL的系列文档对SPL的使用与功能以及原理都作了充分的介绍,而这些系列文章有利于大家理解SPL的思想,将作为一个优秀的.NET系统框架持久层。
而那些文章由于比较分散,而且论述了一些架构思想,对一些初学者感觉有些困难,也应大家的要求,写一份简单的,实用的SPL应用手册,所以我接下来从实际场景模拟开发。
一、引用SPL的发布形式是一个名为PersistenceLayer.Dll的DLL文件,可以在我的BLOG(/tintown/)上下载,因此只需要在项目中“添加引用”即可:若要使用连接Oracle数据库,则用以上方式添加Oracle.DataAccess.dll若要使用SPL连接MySql数据库,则用以上方式添加MySql.Data.dll二、配置文件与实体类SPL的配置文件与实体类可以使用我提供的SmartRobot进行生成,这可以大大加快开发效率,但工具毕竟是工具,不属于SPL持久层的必选部分。
连接数据库:目前SmartRobot支持Ms Sql Server、Ms Access、Oracle数据库,如果是其他数据库只能只好手写实体类了或者等我升级喽;)确定好要生成的实体类存放的地址,到时生成时会生成到相应的目录里。
配置每个表对应的实体类属性,默认实体类名称为“表名”加“Entity”字符,属性名默认与列名相同,上图中的“2”“3”操作对每个表都要重复一次的。
这时就会生成勾上的实体类到指定的目录下了。
只要把指定的实体类引用到项目中即可,实体类默认使用的是BusinessEntity命名空间。
因此在开发时,只要用到实体类的地方使用:using BusinessEntity就可以了。
保存两个配置文件,放到你的项目中:ClassMap.xml与DatabaseMap.xml ClassMap.xml为数据库表与实体类的映射关系DatabaseMap.xml为数据库连接配置:Ms Sql Server例如下:<database name="Northwind"type="MsSqlServer"><parameter name="Provider"value="SQLOLEDB.1"/><parameter name="Password"value="tintown"/><parameter name="Initial Catalog"value="Northwind"/><parameter name="User ID"value="sa"/><parameter name="Data Source"value="(local)"/><classMapFile path="ClassMap.xml"/></database>Ms Access例如下:<database name="DMBCN"type="MsAccess"><parameter name="Provider"value="Microsoft.Jet.OLEDB.4.0"/><parameter name="Data Source"value="dmbcn.mdb"/><classMapFile path="ClassMap.xml"/></database>Oracle例如下:<database name="EDI"type="Oracle"><parameter name="Provider"value="MSDAORA.1"/><parameter name="Password"value="tintown"/><parameter name="User ID"value="EDI"/><parameter name="Data Source"value=""/><classMapFile path="ClassMap.xml"/></database>方式连接Oracle例如下:<database name="Acci2004"type="ODP"><parameter name="Password"value="tintown"/><parameter name="User ID"value="acci"/><parameter name="Data Source"value="oradb"/><parameter name="Persist Security Info"value="False"/><classMapFile path="ClassMap.config"/></database>MySql数据库例如下:<database name="MySql"type="MySql"><parameter name="User Id"value="root"/><parameter name="Data Source"value="localhost"/><parameter name="Database"value="mysql"/><parameter name="password"value="tintown"/><classMapFile path="ClassMap.xml"/></database>ClassMap.xml的地址是相对于DatabaseMap.xml地址的,象例子中都是放在同一目录下,所以直接使用文件名即可.如果是连接多数据库,则可以配置多个<database>节如:<?xml version="1.0"encoding="utf-8"?><map><database name="Northwind"type="MsSqlServer"><parameter name="Provider"value="SQLOLEDB.1"/><parameter name="Password"value="tintown"/><parameter name="Initial Catalog"value="Northwind"/><parameter name="User ID"value="sa"/><parameter name="Data Source"value="(local)"/><classMapFile path="ClassMap.xml"/></database><database name="MySql"type="MySql"><parameter name="User Id"value="root"/><parameter name="Data Source"value="localhost"/><parameter name="Database"value="mysql"/><parameter name="password"value="tintown"/><classMapFile path="ClassMap2.xml"/></database></map>所示为同时连接Ms Sql Server数据库与MySql数据库三、初始化数据连接在页面的Page_Onload中使用如下进行初始化(假设DatabaseMap.xml放在Config目录下):string DatabaseXml="Config/DatabaseMap.xml";PersistenceLayer.Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml);以上的初始化只需要执行一次即会放在应用项目中,但Web会经常性的丢失Application,导致初始信息丢失,因此在每次执行数据库操作前都最好能进行初始化。
SPL讲解(2)--基础设计篇

SmartPersistenceLayer 2.0 之基础设置篇现在我要讲一下,SPL在系统中应该如何应用,通过本篇,你将会学会如何配置SPL 到你的系统中。
SPL运行原理SPL作为一个数据访问平台,最终以DLL的方式体现,那么系统只要引用SPL的DLL 就可以开始应用了。
SPL将依赖于两个XML配置文件:数据源配置文件(以下我称之为DatabaseMap.xml)和实体映射文件(以下称之为ClassMap.xml)。
这两个配置文件在整个系统运行时,将一次性载入到内存,这样可以提高SPL的运行效率,所以如果这两个配置文件修改了,要IISReset 或是重编译才能见到效果。
DatabaseMap.xmldatabaseMap.xml是数据源配置文件,在这里配置系统运行的数据库连接,目前支持三种数据源(SQL Server,Oracle,Access),可以在这个文件中配置多个多种数据源,下面举个例子:<?xml version="1.0"encoding="utf-8"?><map><!-- SQL Server服务器配置 --><database name="SQL"type="MsSqlServer"><parameter name="Provider"value="SQLOLEDB.1"/><parameter name="Password"value=""/><parameter name="Initial Catalog"value="northwind"/><parameter name="User ID"value="sa"/><parameter name="Data Source"value="localhost"/><classMapFile path="ClassMap1.xml"/></database><!-- SQL Server服务器配置 --><database name="ACCESS"type="MsAccess"><parameter name="Provider"value=" Microsoft.Jet.OLEDB.4.0"/><parameter name="Data Source"value=" D:\pl\Test\test.mdb"/><classMapFile path="ClassMap2.xml"/></database><!-- SQL Server服务器配置 --><database name="ORACLE"type="Oracle"><parameter name="Provider"value="MSDAORA.1"/><parameter name="Password"value="password"/><parameter name="User ID"value="user"/><parameter name="Data Source"value=""/><classMapFile path="ClassMap3.xml"/></database></map>以上列举了三种数据库的配置信息,其中:database 的name是指在SPL中要使用的数据源名,这个值要能唯一标识一个连接,这样在SPL中可以直接使用name就可以执行操作了.database的type有三种:MsSqlServer是指SQL数据库MsAccess是指Access数据库Oracle是指ORACLE数据库parameter是连接中要用到的各个参数,这根据不同的数据源类型会有不同的值,具体的参照上面的写法就可以了.如果要扩展参数,可以直接添加parameter,因为SPL中从parameter中读取[值对]组装成连接字符串的.每个连接源上都有一个<classMapFile path="ClassMap.xml"/>是指定这个数据源对应的表与实体的映射信息,可以采用与databaseMap的相对路径指定,也可以指定为绝对路径,下面解释一下ClassMap.xml中的内容.ClassMap.xmlClassMap.xml是实体与表的映射关系,我以一个典型的例子要做解释,比如目前有个表为学生表Student,有字段:Id 序号Int pk 自动增长No 学号Varchar(40) pkName 姓名Varchar(40)Birthday 出生日期DatatimeGrade 年级IntScore 入学成绩decimal那么对应的映射信息为:<class name="StudentEntity"table="Student"database="MyDB"><attribute name="Id"column="Id"type="Integer" increment="true"key="primary"/><attribute name="No"column="No"type="String"key="primary"/><attribute name="Name"column="Name"type="String"/><attribute name="Birthday"column="Birthday"type="Date"/><attribute name="Grade"column="Grade"type="Integer"/><attribute name="Score"column="Score"type="Decimal"/></class>从以上的配置我们很容易理解:class 的name是指实体名,这要与实体类的名称相同table是指映射的数据库是的表名;database是指定实体默认的数据库源,对应databaseMap.xml的配置;IsSaveToMemory为可选配置,如果此表为维护性数据,具有字段少,记录少,修改频率低,使用频率高,就可以设置IsSaveToMemory="true",这样,这个表的数据将会自动在内存存取,具体将在后面讲解.attribute是每一个对应的实体属性与表字段名映射,name为实体的属性名,要与实体类中的属性相同;column是指表的字段名,这与表中的字段要相同;type是指类型,如整数型Integer,字符型String,日期型Date,数字型Decimal等.increment是指字段是否为自动增长,是则标识为true,这样SPL将会从数据库中自动生成;key值为primary说明此字段是主键,在SPL中每个表必须要有一个主键,这作为表的唯一标识;关于type的对应关系:。
Informix-SPL(过程)语法详解

Informix-SPL(过程)语法详解 (到这个网站很久了,贡献一点吧) 作者:蓝点123发表于:2003-03-04 15:04:15Informix数据库用户一般都熟悉的使用SQL语句进行简单的查询和统计,而在Informix-Online的数据库服务器中提供了用结构化查询语言SQL语句和流程控制存储语言SPL创建存储例程,以减少Informix的处理。
存储例程是SQL语句和SPL的集合。
它们存放在数据库中,SQL语句会被分析.优化,在例程的执行中,高速缓存中会有一执行规划,使后续操作的执行速度很快。
而单独的SQL语句只有在执行时才会被优化,并且存储例程可以被不同的开发工具调用(4GL 、ESQL/C、POWERBUILDER.DELPHI),在SELECT语句中也调用过程。
例程调试简单,不必重新编译应有软件包。
在例程创建时Informix查询处理器会分析它,并产生一执行规划,永久存放于SPROCEDURES.SYSPROBODY.和SYSPROPLAN中,其后例程按此规划执行,由于大部分查询处理已经完成,存储例程可以在瞬间执行完毕。
由于存储例程所具有的优越性,它已成为进行Informix数据库核心开发的有力工具,掌握它对Informix的开发人员有积极意义,现将我在实际工作中使用的语法和例子详解于下,疏漏和错误请来信指教。
1.创建和执行例程①.创建例程语法:CRAETE PROCEDURE [OWNER.]PROCEDURE_NAME (参数1 参数类型=[DEFAULT], 参数2 参数类型=[DEFAULT],参数n 参数类型=[DEFAULT])RETURNING 值1类型,值2类型,值n类型;<......>语句体; END RPOCEDURE例程大小不可超过64K,这包括所有的SQL.SPL.空格.跳格符,例程名最多18个字符,并在数据库中唯一存在,语句间用";"分隔,例程只能在当前数据库中创建,例程创建后是一标准执行模板块,可在不同的应有中对其调用,这对开发不同版本的应用将更为便利。
SPL用法介绍

目录一、数据库实体类、映射自动生成工具 (2)二、SmartPersistenceLayer之设计功能篇 (2)二、SmartPersistenceLayer 2.0 之基础设置篇 (6)三、SmartPersistenceLayer 2.0之实体操作篇 (16)四、SmartPersistenceLayer 2.0 之Criteria操作篇 (24)五、SmartPersistenceLayer 2.0 之事务处理篇 (30)六、SmartPersistenceLayer 2.0 之Condition篇 (34)七、SmartPersistenceLayer 2.0 之Query高级查询篇 (37)八、系统性能提升之道--内存镜像表 (40)九、SmartPersistenceLayer 3.1.0.0 之并发处理篇 (45)十、SmartPersistenceLayer 3.1(10) ---高级事务处理篇 (48)一、数据库实体类、映射自动生成工具SPL_Robot是作为SPL框架的一个辅助工具,不能算作SPL的核心,而且目前有很多朋友需要自己扩展数据库支持,因此决定把SPL_Robot的源码公开,目前公开的源码版本为3.1.0.4,可以支持Oracle、Sql Server、Access数据库,这样,万一在Robot生成过程中遇到错误也可以自行调试解决!!SPL_Robot代码生成器3.1.0.4源码下载:这里要维护SPL_Robot的扩展功能我个人实在是力不从心,所以更希望有网友们能一起来维护扩展SPL_Robot,要是有朋友对代码作了更新与修改,请在此帐后跟帐,说明:1、修改的内容2、在哪个版本号上作的修改3、修改后的版本号4、修改时间5、修改人我也在考虑采用CodeSmith来做SPL的实体代码生成,但精力有限,要是有熟悉CodeSmith 的朋友帮忙就最好了,有兴趣的朋友可以跟我联系!刚有位朋友进行了升级,如下(非常感谢这位网友):1:修改内容*修改生成的两个xml文件DatabaseMap.xml和ClassMap.xml文件格式为config类型,防止直接访问这两个文件造成数据库安全泄露。
PLSQL基本操作手册

第1章用PLSQL连接Oracle数据库PLSQL只能用来连接Oracle数据库(不象PB还可以连接JDBC、ODBC),所以必须首先安装并配置Oracle客户端。
§1.1初次登录PLSQL:运行PLSQL通过如下界面连接Oracle数据库:Database的下拉列表中自动列出了Oracle客户端配置的所有服务名。
选择要连接的Oracle服务名,并输入用户名/密码。
点击ok进行连接。
§1.2登录信息保存功能设置:如果设置了登录信息保存功能,可以通过以下方式连接数据库,而不必每次输入用户名/密码。
点击,在下拉列表中选择之前保存的数据库登录信息,直接进行连接。
登录信息保存功能设置:进入PLSQL后,在菜单区点击右键,出现如下PLSQL配置界面。
将Store with password 选中即可,这样第一次通过用户名/密码登录某数据库后,下次就不用再输入用户名/密码了。
§1.3进入PLSQL后切换数据库连接:点击,选择要连接的数据库即可完成切换。
第2章PLSQL中编写SQL语句并执行点击,并选择SQL Window进入SQL语句编写界面,如下:点击,执行SQL语句,页面右下方出现结果列表。
如下图:(执行快捷键为:F8)点击,使结果全部呈现。
第3章PLSQL中查看数据库表结构§3.1查看表结构:在如下界面,按住Ctrl键并将鼠标移动到一个表名,此时表名变了颜色:点击表名,便可显示表结构,如下图:§3.2表结构窗口和SQL编写窗口切换:在Tools菜单中,选中Window List,此时会新打开一个窗口,将其放置到左下脚,窗口中罗列了右下方操作区打开的所有窗口,通过选择可以进行窗口切换。
也可通过以下方式进行切换:在Window菜单最下方罗列了操作区打开的所有窗口,通过选择可以进行窗口切换。
第4章PLSQL中SQL语句的注释选取想要注释的语句,点击进行注释,如下:结果如下:取消注释点击。
PLSQL简明教程

PL/SQL 简明教程什么是PL/SQL结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。
例:delete from students where major=‘Nutrition’;然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了。
PL/SQL通过增加了用在其它过程性语言中的结构来对SQL进行了扩展,使得它不仅仅是一个数据库查询语言,而且也是一个编程语言。
课程内容一PL/SQL 基本查询与排序本课重点:1、写SELECT 语句进行数据库查询2、进行数学运算3、处理空值4、使用别名ALIASES5、连接列6、在SQL PLUS 中编辑缓冲,修改SQL SCRIPTS7、ORDER BY 进行排序输出。
8、使用WHERE 字段。
一、写SQL 命令:不区分大小写。
SQL 语句用数字分行,在SQL PLUS 中被称为缓冲区。
最后以;或/ 结束语句。
也可以用RUN 来执行语句二、例1:SQL> SELECT dept_id, last_name, manager_id2 FROM s_emp;2:SQL> SELECT last_name, salary * 12, commission_pct2 FROM s_emp;对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。
SQL> SELECT last_name, salary, 12 * (salary + 100)2 FROM s_emp;三、列的别名ALIASES:计算的时候特别有用;紧跟着列名,或在列名与别名之间加“AS”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。
例(因字体原因,读者请记住:引号为英文双引号Double Quotation):SQL> SELECT last_name, salary,2 12 * (salary + 100) ”Annual Salary”3 FROM s_emp;四、连接符号:||连接不同的列或连接字符串使结果成为一个有意义的短语:SQL> SELECT first_name || ‟‟ || last_name2 || ‟, ‟|| title ”Employees”3 FROM s_emp;五、管理NULL 值:SQL> SELECT last_name, title,2 salary * NVL(commission_pct,0)/100 COMM3 FROM s_emp;此函数使NULL 转化为有意义的一个值,相当于替换NULL。
plsql教程

plsql教程PL/SQL是一种与Oracle数据库一起使用的过程化编程语言。
它是操纵、定义和控制Oracle数据库对象的语言,并提供了一种编写存储过程、触发器、函数、包等数据库程序模块的方式。
PL/SQL的基本语法与SQL相似,可以执行SQL语句和存储过程的调用。
以下是一些常用的PL/SQL代码示例:1. 声明变量和常量:```DECLAREnum1 NUMBER := 10;text1 VARCHAR2(20) := 'Hello';constant1 CONSTANT NUMBER := 5;BEGIN-- 执行代码END;```2. 条件语句:```IF num1 > 0 THENNULL;ELSIF num1 = 0 THENNULL;ELSENULL;END IF;```3. 循环语句:```FOR i IN 1..5 LOOPNULL;END LOOP;WHILE num1 > 0 LOOP NULL;num1 := num1 - 1; END LOOP;LOOPNULL;EXIT WHEN num1 = 0; num1 := num1 - 1; END LOOP;```4. 异常处理:```BEGIN-- 执行代码EXCEPTIONWHEN OTHERS THEN -- 处理异常END;```5. 创建存储过程:```CREATE OR REPLACE PROCEDURE procedure_name (param1 IN NUMBER, param2 OUT VARCHAR2) IS-- 变量声明BEGIN-- 执行代码param2 := 'Hello';END;```这些只是PL/SQL语言的一部分功能和用法。
通过学习和实践,您可以掌握更多PL/SQL的知识和技巧,提高数据库编程的效率和质量。
SPL讲解(4)--Criteria操作篇

SmartPersistenceLayer 2.0 之Criteria操作篇概念以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的。
如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和Delete,为此,在SPL引进了Criteria(标准)的概念,那么在SPL中设计了三种Criteria:RetrieveCriteria(获取标准)这个标准是根据查询条件,排序方式来获取满足条件的数据,可以以DataTable 、实体集的方式来返回。
此标准会生成”Select * from TB where … order …”语句执行UpdateCriteria (更新标准)这个标准是根据条件对一个表进行批量更新,最终会生成”Update TB set …where ..”语句执行DeleteCriteria(删除标准)这个标准是根据条件对一个表进行批量删除,最终会生成”Delete from TB where …”语句执行这些标准都是针对单一实体,也就是针对一个表的操作,当然对于Update和Delete来说,这些操作已经足够了,可对于Select来说,我们经常会多表查询,所以,关于这种联合查询将会在下一篇的”高级查询篇”中讲解。
RetrieveCriteria 获取标准这个RetrieveCriteria是针对单一实体的查询,可以定义查询条件,排序方式并以不同的结果返回出来,下面我举一个例子:我们查询二年级的姓刘的学生,并以学号升序排RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity)); //实例化Condition c=rc.GetNewCondition(); //实例化一个条件c.AddEqualTo(StudentEntity.__GRADE,2); //二年级条件c.AddMatchPrefix(StudentEntity.__Name,’刘’); //匹配’刘’字开头c.OrderBy(StudentEntity.__NO); //按学号排DataTable dt=rc.AsDataTable() ; //以DataTable方式返回步骤分析:1.实例化一个RetrieveCriteria时要指明是哪个实体类,使用“typeof(实体类名)”2.New一个Condition(条件),可以使用此方法New出多个Condition,多个Condition之间是”OR”的关系3.给Condition指定条件,比如使用AddEqualTo(相等)、AddMatchPrefix(前匹配),关于Condition将会专门进行介绍4.使用OrderBy()方法指定排序方式,默认为升序,如果要以降序排序使用:OrderBy(StudentEntity.__NO,false)5.最后以AsDataTable的方式返回DataTable,这可以方便进行DataGrid的数据绑定多种返回方式例子中是采用DataTable进行返回,这也是平时最常用的,SPL中还提供了其他的几种方式:EntityContainer 实体集这是指返回结果以实体的集合方式体现,对于实体集的操作是非常简单的:EntityContainer ec=rc.AsEntityContainer();for(int i=0;i<ec.Count;i++){StudentEntity student=(StudentEntity)ec[i];…..//得到实体后可以进行自己的操作}ObjectCursor 游标SPL也提供游标的方式返回,这与实体集是差不多的概念,这是对原版本的兼容保留:ObjectCursor oc=rc.AsObjectCursor();if(oc.HasObject()){StudentEntity student=(StudentEntity)oc.NextObject();…. //得到实体后可以进行自己的操作}在以游标返回后,进行操作前,一定要以HasObject()进行判断,以免抛出异常EntityObject 单实体SPL在 2.0中增加了以EntityObject单实体的返回方式,大家觉得奇怪了,RetrieveCriteria是返回多记录的,这个单实体是何意了。
PLSQL教程学习教程

第7页/共36页
PL/SQL中的标识符
下面是建议使用的变量命名方法
标识符 程序变量 程序常量 游标变量 异常标识
表类型 表
记录类型 参数
trim
N/A
从集合的最后删除一个元素
可变数组
Delete(n)
N/A
删除元素下标为n的元素
表
第22页/共36页
表和数组属性
例: DECLARE type strings_table is table of varchar2(10) index by binary_integer; strings strings_table; int number;
-- Declare a varray with four element
v_list strings := strings('scott','peter','smith','tom');
int number;
BEGIN
int := 1;
dbms_output.put_line(v_list(int));
PL/SQL中的变量类型
类型 CHAR(n) VARCHAR2(n) BINARY_INTEGER NUMBER(p,s)
LONG DATE BOOLEAN ROWID
说明 定长字符串,长度可选,缺省1。最大可达2000字节 可变字符串,长度不能缺省,最大可达4000字节 带符号整数,为整数计算优化性能 数值,p代表刻度,s代表精度 变长字符串 日期 布尔 存放数据库行号
SPL语言

参考网址:1./view/047e654de518964bcf847c99.html 一.SPL块结构由三个部分组成1.可选的变量声明部分》用来声明那些在执行和捕获异常部分中使用到的变量,游标和类型。
》声明部分是在执行部分中BEGIN关键字前面出现,声明部分以关键字DECLARE开始。
2.必选的命令执行部分》3.可选的捕获异常部分》捕获异常的部分以关键字EXCEPTION开始,在代码块的结束位置结束。
代码快的通用结构[[DECLARE]declarations] //declarations是指在代码块中的一个或多个变量,游标或类型的声明。
每一个声明以一个分号结束。
BEGINstatements[EXCEPTIONWHEN exception_condition THENstatements [,...]]END;例子一:DECLAREv_numerator NUMBER(2);v_denominator NUMBER(2);v_result NUMBER(5,2);BEGINv_numerator := 75;v_denominator := 14;v_result := v_numerator/v_denominator;DBMS_OUTPUT.PUT_LINE (v_numerator || 'divided by' || v_denominator || 'is' ||v_result);END;首先将3个数值变量声明为NUMBER数据类型,在执行部分中对两个变量分配了数值,然后使其中一个数值被另外一个数值整除。
所得的结果存放在第三个变量中,最后使用第三个变量用来显示结果,执行这个代码块输出如下所示:75 divided by 14 is 5.36例子二:v_numerator NUMBER(2);v_denominator NUMBER(2);v_result NUMBER(5,2);BEGINv_numerator := 75;v_denominator := 0;v_result := v_numerator/v_denominator;DBMS_OUTPUT.PUT_LINE (v_numerator || 'divided by' || v_denominator || 'is' ||v_result);EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(‘An exception occurred’);END;下面的这个输出结果显示了当代码块中的执行了除零操作时,在捕获异常部分中执行相关语句的结果。
plsql 使用手册

plsql 使用手册PL/SQL 使用手册PL/SQL 是一种过程化编程语言,特别适合与 Oracle 数据库一起使用。
本文将为您提供 PL/SQL 的使用手册,详细介绍 PL/SQL 的特性、语法以及常用技巧,帮助您快速上手并有效地利用 PL/SQL 进行数据库开发。
1. PL/SQL 简介PL/SQL 是 Oracle 数据库中扩展功能的一部分,它结合了 SQL 语句和流程控制语句,允许开发人员在数据库中执行复杂的任务和操作。
PL/SQL 以块的方式组织代码,这些代码块可以嵌套和重用,提高了代码的可维护性和复用性。
2. PL/SQL 基础语法2.1 变量和数据类型在 PL/SQL 中,可以声明各种类型的变量来存储数据。
常见的数据类型包括整型、浮点型、字符型等。
通过变量,可以存储和操作数据,使得代码更加灵活和可读性更强。
2.2 控制流程PL/SQL 提供了丰富的控制流程语句,如条件判断、循环等,用于实现不同的业务逻辑。
通过控制流程语句,可以根据不同的情况执行不同的代码块,实现灵活的程序逻辑。
2.3 异常处理PL/SQL 具有强大的异常处理机制,通过使用 EXCEPTION 关键字来捕获和处理异常。
可以使用 TRY-CATCH 结构捕获异常,并在异常发生时执行相应的操作,保证程序的健壮性和稳定性。
3. PL/SQL 常用技巧3.1 存储过程存储过程是 PL/SQL 的一种重要应用,可以将一系列的 SQL 语句和逻辑封装在一个过程中,提供数据库操作的接口。
存储过程可以提高性能,减少网络开销,并增加代码的重用性。
3.2 游标游标是 PL/SQL 用于遍历结果集的一种对象。
通过游标,可以从查询结果中提取出数据,并逐条进行处理。
这在需要对查询结果进行逐行处理时非常有用。
3.3 包和触发器PL/SQL 支持包和触发器的概念,这些是组织和管理代码的有力工具。
通过将相关的过程和函数组织到包中,可以提高代码的可维护性和可读性。
PLSQL基本操作手册

PL/SQL基本操作手册PL/SQL(Procedural Language/Structured Query Language)是一种基于SQL 语言的过程编程语言,它在Oracle数据库中非常常见。
本文将介绍PL/SQL的基本操作,如变量、控制语句、游标等。
变量和常量变量可以使用DECLARE语句声明。
在代码中,变量必须指定它们的类型,例如NUMBER、VARCHAR2或BOOLEAN。
DECLAREv_employee_id NUMBER:=100;v_employee_name VARCHAR2(50) :='John Doe';v_is_hired BOOLEAN:=TRUE;BEGIN-- code goes hereEND;常量是一个不可变的参数,可以使用CONSTANT关键字定义。
常量的值不会在程序中更改。
DECLAREc_tax_rate CONSTANT NUMBER(4, 2) :=0.08;BEGIN-- code goes hereEND;控制语句控制语句提供了决策和循环结构。
IF语句IF语句用于对一个表达式进行测试,以确定哪个分支应该执行。
IF expression THEN-- code goes hereELSIF expression THEN-- code goes hereELSE-- code goes hereEND IF;CASE语句CASE语句用于检查多个可能的条件。
CASE expressionWHEN value1 THEN-- code goes hereWHEN value2 THEN-- code goes hereELSE-- code goes hereEND CASE;LOOP语句LOOP语句用于无限的循环,可以通过某些条件来终止循环。
LOOP-- code goes hereEXIT WHEN expression;END LOOP;WHILE语句WHILE语句用于执行一系列语句,只要指定条件为TRUE。
SPL讲解(3)--实体操作篇

SmartPersistenceLayer 2.0之实体操作篇通过上一篇的”设置篇”后,在我们的系统中就可以开始使用SPL的强大功能了,这一节我主要是介绍SPL的实体(Entity)操作。
原理SPL中的实体可能与其他PL的实体有所区别,一般如果从理论上讲的话,实体仅仅是数据的属性描述,不应该带有操作方法,这种方式也存在一种缺点,就是实体没有了操作,只能借助”辅助类”进行实体的操作,而这种操作势必不能是强类型的,而且开发员可能无法彻底站在面向对象的角度开发系统,因此,SPL中采用了实体中集成部分常用操作,即Insert,Update,Delete,Retrieve操作,这样当我们要对实体进行操作时,可以直接调用实体的这些方法,实现强类型的操作控制。
为了让SPL能自动实现这种功能,实体(Entity)要继承SPL中的EntityObject抽象类,如:Public class StudentEntity : EntityObject这样,这个实体就自动具有了Save(),Retreve(),Delete()的功能。
实体操作实体的常用操作为新增(Insert)、更新(Update)、删除(Delete) 、获取(Retrieve),在SPL 中体现为Save(),Delete(),Retrieve()这三个方法,Save()会自动判断实体是否已经持久化(IsPersistence)来进行Insert和Update区分。
下面我还是以上一篇”基础设置篇”中的例子来演示:实体的XML定义如下:<class name="StudentEntity"table="Student"database="MyDB"><attribute name="Id"column="Id"type="Integer" increment="true"key="primary"/><attribute name="No"column="No"type="String"key="primary"/><attribute name="Name"column= StudentEntity "Name"type="String"/><attribute name="Birthday"column="Birthday"type="Date"/><attribute name="Grade"column="Grade"type="Integer"/><attribute name="Score"column="Score"type="Decimal"/></class>实体类如下:内容略,请参照”基础设置篇”namespace BusinessEntity{using System;using System.Collections;using System.Data;using PersistenceLayer;public class StudentEntity : EntityObject{//常量定义部分…//局部变量定义部分…//属性定义部分…}}实体新增:以往的编程模式中,要往数据库的某表中插入一条记录,有人采用SQL语句执行,这要注意SQL语句的正确性,单引号问题(要使用string.replace(“’”,”’’”)进行替换);还有可以采用Command的Parameter的方式,这样就可以避免单引号问题;还有人为了提高性能会采用存储过程,那么这些过程都会影响开发的速度,在SPL中我们的过程变的相当简单了:StudentEntity student=new StudentEntity(); //实体化一个学生对象//以下进行属性赋值//student.Id=1; //此为自动增长,SPL会自动获取student.No=”200401”;=”张三”;student.Birthday=DateTime.Parse(“1979-01-22”);student.Grade=2;student.Score=580;try{ student.Save(); //实体保存}catch(PlException exp) //抛出异常{if(exp.ErrorType==ErrorTypes.NotUnique) //如果是主键冲突{Response.Write(“主键冲突”);}elsethrow exp;}步骤分析:1.直接New一个实体对象,给对象属性赋值2.然后Save(),如果发生主键冲突,则可以通过catch PersistenLayer.PlException异常来处理,判断是否为PersistenceLayer.ErrorTypes.NotUnique,这样就可以完成新增记录。
PLSQL语法以及程序编写介绍

PLSQL语法以及程序编写介绍
PL/SQL语法介绍
PL/SQL是一种基于Oracle数据库开发的专用程序设计语言。
它是一种非常强大的程序开发语言,可以对SQL语句进行封装和定义,可以从有限的程序开发语言创建功能强大的程序,可以完成一些特殊的任务,可以为Oracle数据库应用程序提供性能改进和维护。
PL/SQL语法由三个主要部分组成:名称、控制结构和声明。
PL/SQL语句可以是SQL语句(简单SQL或复杂SQL)、存储过程(简单或复杂)等。
1.名称:
PL/SQL的名称包括数据库名称、用户名、表名、字段名、变量名、存储过程名、触发器名、索引名、约束名以及函数名等。
2.控制结构:
PL/SQL控制结构由if、if…else、case、loop、exit、for loop等构成,它们可以按照设定的条件执行、跳转、变化等分支控制。
它们根据程序的要求定义和执行在多次执行情况下执行的代码。
PL/SQL声明包括变量声明、常量声明、异常声明以及游标声明等。
变量声明用于存储和传递数据,而常量声明可以用作常数,比如文本、数字以及数据类型。
异常声明用于捕获和处理在特定情况下产生的异常,而游标声明可以用来识别和访问数据库中的特定记录。
PL/SQL程序编写时,应该按照以下步骤进行:
1、设计程序
在开始编写之前。
spl语言说明教程

内模式。
数据库技术与应用
北京邮电大学 计算机学院
SQL功能极强,完成核心功能只用了9个动词。
表 3.1 SQL 语言的动词 SQL 功 能 数 据 查 询 数 据 定 义 数 据 操 纵 数 据 控 制 动 词 SELECT CREATE, DROP, ALTER INSERT,UPDATE DELETE GRANT,REVOKE
实体完整性定义(续)
[例] 将Student表中的Sno属性定义为码 (1)在列级定义主码 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20));
数据库技术与应用
北京邮电大学 计算机学院
SQL支持关系数据库三级模式结构
SQL
视图1
视图2
外模式
基本表1
基本表2
基本表3
基本表4
模式
存储文件1
存储文件2
内模式
数据库技术与应用
北京邮电大学 计算机学院
5.2 数据定义语句
5.2.1 基本表的定义和维护 1. 定义基本表 定义基本表语句的一般格式为: CREATE TABLE [〈库名〉]〈表名〉(
〈列名〉〈数据类型〉[〈列级完整性约束条件〉] ,
〈列名〉〈数据类型〉[〈列级完整性约束条件〉]] [,„n] [,〈表级完整性约束条件〉] [,„n] );
数据库技术与应用
北京邮电大学 计算机学院
(1) SQL支持的数据类型
类型表示
SMALLINT 数值型 数据 INTEGER或INT DECIMAL(p[,q]) FLOAT 字符型 数据 CHARTER(n)或 CHAR(n) VARCHAR(n) GRAPHIC(n) VARGRAPHIC(n) DATE 日期时 间型 TIME TIMESTAMP
PLSQL经典教学

2. IF选择结构
IF 条件 THEN 语句序列; END IF; “条件”为逻辑表达式或关 系表达式,“条件”为 TRUE时执行“语句序列”, 为FALSE时执行END IF后 面的语句。 THEN IF 条件
语句序列 1 ELSE 语句序列
条件
语句1
语句2
IF 条件1 THEN 语句序列1 ELSIF 条件2 THEN 语句序列2 ELSE 语句序列3 END IF; 例1: DECLARE N1 NUMBER:=11; N2 NUMBER; BEGIN IF N1>10 THEN N2:=N1+10; DBMS_OUTPUT.PUT_LINE(TO_CHAR(N2)); END IF; END;
3. CASE选择结构 CASE 变量 WHEN 表达式1 THEN 语句序列1; WHEN 表达式2 THEN 语句序列2; …… WHEN 表达式N THEN 语句序列N; [ELSE 语句序列N+1;] END CASE
说明:
1. 当“变量”的值与某 个表达式值相同时,将 执行相应的语句序列
块结构: [DECLARE 说明部分 ] BEGIN 语句(SQL或PL/SQL语句) [EXCEPTION 错误处理程序 ] END 3. PL/SQL程序分类 由基本PL/SQL块组成PL/SQL程序。程序有: 无名块:它嵌入在某个应用中的PL/SQL块。 存储过程或函数:命名了的PL/SQL块,可以带
2. 当变量与所有表达式 不等时执行序列N+1 3. 语句序列1到语句序 列N+1中只能执行一个 语句序列。
例1:DECLARE C1 CHAR(1):='F'; N1 NUMBER:=2; N2 NUMBER:=35; NC NUMBER; BEGIN NC:=ASCII(C1); CASE NC WHEN N2*N2 THEN N1:=N2*N2; DBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1)); WHEN N2+N2 THEN N1:=N2+N2; DBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1)); ELSE DBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1)); DBMS_OUTPUT.PUT_LINE('NC='||TO_CHAR(NC));
PHP的SPL标准库的用法介绍

PHP的SPL标准库的用法介绍PHP的SPL标准库的用法介绍本文介绍下,php编程中SPL中的用法,SPL,PHP 标准库(Standard PHP Library),此从 PHP 5.0 起内置的组件和接口,有需要的朋友参考下。
PHP SPL的用法SPL,PHP 标准库(Standard PHP Library),此从 PHP 5.0 起内置的组件和接口,并且从PHP5.3 已逐渐的成熟。
SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。
似乎众多的 PHP 开发人员基本没有使用它,甚至闻所未闻。
究其原因,可以追述到它那阳春白雪般的说明文档,使你忽略了「它的存在」。
SPL 这块宝石犹如铁达尼的「海洋之心」般,被沉入海底。
而现在它应该被我们捞起,并将它穿戴在应有的位置,而这也是这篇文章所要表述的观点。
SPL 提供了什么?SPL 对 PHP 引擎进行了扩展,例如 ArrayAccess、Countable 和SeekableIterator 等接口,它们用于以数组形式操作对象。
同时,你还可以使用 RecursiveIterator、ArrayObejcts 等其他迭代器进行数据的迭代操作。
它还内置几个的对象例如Exceptions、SplObserver、Spltorage 以及 splautoloadregister、splclasses、iteratorapply 等的帮助函数(helper functions),用于重载对应的功能。
这些工具聚合在一起就好比是把多功能的瑞士军刀,善用它们可以从质上提升 PHP 的代码效率。
那么,如何发挥它的威力?重载 autoloader如果你是位「教科书式的程序员」,那么你保证了解如何使用__autoload 去代替includes/requires 操作惰性载入对应的类,对不?但久之,你会发现你已经陷入了困境,首先是你要保证你的类文件必须在指定的文件路径中,例如在Zend 框架中你必须使用「_」来分割类、方法名称(你如何解决这一问题?)。
SPL讲解(7)--Query高级篇

SmartPersistenceLayer 2.0 之Query高级查询篇总述在看了前面的功能后,大家都会考虑到多表之间的查询怎么办.在这里,我想先讲一下查询在应用系统中的复杂性/重要性/可行性.重要性:查询统计是系统维护的一个目标之一,是系统的一个必不可少的部分,因此,在绝大部分的系统中,都会有查询统计。
复杂性:查询是在系统开发中一个最复杂的部分,谁都无法预料查询统计的复杂性,哪怕是在一个小型系统中,因此,在SPL中也是无法实现这么多的查询统计,为了兼容,SPL 也努力实现了它所能做的,就是”联合查询”功能,将通过Query类来完成.可行性:要能快速,有效的应付复杂多变的查询与统计,在我看来,用视图进行处理是一个最有效的方式.一是视图的高速:数据库的视图查询要比执行SQL来的快多,因为数据库会为视图进行缓存.二是开发快速性:写SQL语句需要很多时间,而且查询汇总的语句都是相当复杂的,所以也容易出错,而视图会把问题变的非常简单,开发速度大大提高.三是维护性:由于查询的复杂性,变动频繁将是最明显的特征,所以SQL语句的应变能力没有视图来得好.因此,我的建议是对于一些查询与统计,我们应尽可能的采用视图来做.简单的查询当然可以使用SQL.现在来介绍SPL中的Query联合查询.联合查询例子:A表的ID与B表的AID有关联,我们要关联A/B表,选择A表的NAME和B表的COMPANY值.Query q1=new Query(typeof(A)); //建一个A表的Queryq1. AddAttribute(); //添加一个要选择的字段Condition c=q1. GetQueryCondition(); //A表产生一个查询c.AddEqualTo(“Name”,”tintown”); //给A添加条件,请参考Conditionq1.OrderBy(“Name”); //添加一个排序,请参考RetrieveCriteria Query q2=new Query(typeof(B)); //建一个B表的Queryq2.AddAttribute(PANY,”公司名”); //添加另一个选择的字段,以别名输出q1. AddJoinQuery(A.ID,q2,B.AID); //把q1与q2关联起来DataTable dt=q1. Execute(); //执行查询步骤分析:1.Query的创建与Criteira差不多一样的,要指定一个实体类型typeof(A)2.由于是多表查询,所以要求设定选择哪些字段,目前SPL中有三种方式:1.AddAttribute(字段名):这是直接以字段名为输出名2.AddAttribute(字段名,别名):这是可以把字段名以别名的方式输出3.AddAttribute(AttributeType.All):这是指以*号的方式全部显示3. 使用Execute()执行后返回DataTable类型,可以直接绑定用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
属性上的约束条件的定义(续)
2.列值唯一
[例] 建立部门表DEPT,要求部门名称Dname列取值 唯一,部门编号Deptno列为主码
CREATE TABLE DEPT
(Deptno NUMERIC(2),
Dname CHAR(9) UNIQUE,/*要求Dname列值唯 一*/ Location CHAR(10), PRIMARY KEY (Deptno) );
数据库技术与应用
北京邮电大学 计算机学院
实体完整性定义
关系模型的实体完整性
CREATE TABLE中用PRIMARY KEY定义
单属性构成的码有两种说明方法
定义为列级约束条件
定义为表级约束条件
对多个属性构成的码只有一种说明方法
定义为表级约束条件
数据库技术与应用
北京邮电大学 计算机学院
数据库技术(续)
[例]将SC表中的Sno,Cno属性组定义为码
CREATE TABLE SC
(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, /*只能在表级定义
PRIMARY KEY (Sno,Cno) 主码*/ );
RDBMS提供,而不必由应用程序承担
数据库技术与应用
北京邮电大学 计算机学院
属性上的约束条件的定义
CREATE TABLE时定义
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个布尔表达式(CHECK)
数据库技术与应用
北京邮电大学 计算机学院
属性上的约束条件的定义(续)
拒绝/级连修改/设置为空值
数据库技术与应用
北京邮电大学 计算机学院
违约处理
参照完整性违约处理
1. 拒绝(NO ACTION)执行
默认策略
2. 级联(CASCADE)操作 3. 设置为空值(SET-NULL)
对于参照完整性,除了应该定义外码,还应定义
外码列是否允许空值
数据库技术与应用
数据库技术与应用
北京邮电大学 计算机学院
SQL支持关系数据库三级模式结构
SQL
视图1
视图2
外模式
基本表1
基本表2
基本表3
基本表4
模式
存储文件1
存储文件2
内模式
数据库技术与应用
北京邮电大学 计算机学院
5.2 数据定义语句
5.2.1 基本表的定义和维护 1. 定义基本表 定义基本表语句的一般格式为: CREATE TABLE [〈库名〉]〈表名〉(
北京邮电大学 计算机学院
特殊数据类型
数据库技术与应用
(2) 列级完整性的约束条件
针对属性值设置的限制条件。
1) NOT NULL或NULL约束。NOT NULL约束不允许字段值为空,而
NULL约束允许字段值为空。 2) UNIQUE约束。惟一性约束,即不允许列中出现重复的属性值 。 3) DEFAULT约束。默认值约束。
数据库技术与应用
北京邮电大学 计算机学院
实体完整性检查和违约处理
插入或对主码列进行更新操作时,RDBMS按照实体完
整性规则自动进行检查。包括:
1. 检查主码值是否唯一,如果不唯一则拒绝插入或
修改
2. 检查主码的各个属性是否为空,只要有一个为空
就拒绝插入或修改
数据库技术与应用
北京邮电大学 计算机学院
北京邮电大学 计算机学院
违约处理(续)
[例] 显式说明参照完整性的违约处理示例
CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*级联删除SC表中相应的元组*/ ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION
实体完整性检查和违约处理(续)
检查记录中主码值是否唯一的一种方法是进行全表扫描
数据库技术与应用
北京邮电大学 计算机学院
实体完整性检查和违约处理(续)
索引
数据库技术与应用
北京邮电大学 计算机学院
参照完整性定义
关系模型的参照完整性定义
在CREATE TABLE中用FOREIGN KEY短语定义哪
数据库技术与应用
北京邮电大学 计算机学院
2. SQL的特点
(1) SQL具有自含式和嵌入式两种形式。 (2) SQL具有语言简洁、易学易用的特点。 (3) SQL支持三级模式结构。
① 全体基本表构成了数据库的模式。
② 视图和部分基本表构成了数据库的外模式。 ③ 数据库的存储文件和它们的索引文件构成了关系数据库的
内模式。
数据库技术与应用
北京邮电大学 计算机学院
SQL功能极强,完成核心功能只用了9个动词。
表 3.1 SQL 语言的动词 SQL 功 能 数 据 查 询 数 据 定 义 数 据 操 纵 数 据 控 制 动 词 SELECT CREATE, DROP, ALTER INSERT,UPDATE DELETE GRANT,REVOKE
/*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/
ON UPDATE CASCADE /*当更新course表中的cno时,级联更新SC表中相应的元组*/ ); 数据库技术与应用
北京邮电大学 计算机学院
用户定义的完整性
用户定义的完整性就是针对某一具体应用的数
据必须满足的语义要求
DEFAULT〈约束名〉〈默认值〉FOR〈列名〉
4) CHECK约束。检查约束。 CONSTRAINT〈约束名〉CHECK (〈约束条件表达式〉)
北京邮电大学 计算机学院
数据库技术与应用
(3) 表级完整性约束条件
涉及到关系中多个列的限制条件。
1) UNIQUE约束。惟一性约束。 2) PRIMARY KEY约束。定义主码,保证惟一性和非空性。 CONTRAINT〈约束名〉PRIMARY KEY [CLUSTERED] (〈列组〉) 3) FOREIGN KEY约束。用于定义参照完整性。
学号 CHAR(5) NOT NULL UNIQUE, 姓名 CHAR(8) NOT NULL, 年龄 SMALLINT, 性别 CHAR(2), 所在系 CHAR(20), DEFAULT C1 20 FOR 年龄, CONSTRAINT C2 CHECK(性别 IN (‘男’,‘女’)));
数据库技术与应用
些列为外码
用REFERENCES短语指明这些外码参照哪些表的
主码
数据库技术与应用
北京邮电大学 计算机学院
参照完整性定义(续)
例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,( Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和 Course表的主码 [例] 定义SC中的参照完整性 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表级定义参照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表级定义参照完整性*/ );
北京邮电大学 计算机学院
数据库技术与应用
参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
被参照表(例如Student) 参照表(例如SC) 违约处理
可能破坏参照完整性
插入元组
拒绝
可能破坏参照完整性
修改外码值
拒绝
删除元组
可能破坏参照完整性
拒绝/级连删除/设置为空值
修改主码值
可能破坏参照完整性
CONTRAINT〈约束名〉FOREIGN KEY(〈外码〉)
REFERENCES〈被参照表名〉(〈与外码对应的主码名〉)
数据库技术与应用
北京邮电大学 计算机学院
建立基本表: 学生(学号,姓名,年龄,性别,所在系); 课程(课程号,课程名,先行课); 选课(学号,课程号,成绩).
CREATE TABLE 学生(
北京邮电大学 计算机学院
CREATE TABLE 课程( 课程号 CHAR(5) PRIMARY KEY, 课程名 CHAR(20), 先行课 CHAR(5));
数据库技术与应用
北京邮电大学 计算机学院
CREATE TABLE 选课( 学号 CHAR(5), 课程号 CHAR(5), 成绩 SMALLINT, CONSTRAINT C3 CHECK(成绩 BETWEEN 0 AND 100), CONSTRAINT C4 PRIMARY KEY(学号,课程号), CONSTRAINT C5 FOREIGN KEY(学号) REFERENCES 学生(学号), CONSTRAINT C6 FOREIGN KEY(课程号) REFERENCES 课程(课程号));
第5章 关系数据 库标准语言—SQL
关系数据库标准语言—SQL
5.1 SQL概述及特点
5.2 数据定义语句 5.3 数据查询语句 5.4 数据更新语句 5.5 嵌入式SQL
5.6 数据控制机制和语句
数据库技术与应用