oracle数据库基础入门教程笔记_第1页
oracle数据库基础入门教程笔记_第2页
oracle数据库基础入门教程笔记_第3页
oracle数据库基础入门教程笔记_第4页
oracle数据库基础入门教程笔记_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

主讲:燕十八课时:8课时官方论坛:老师微博:Oracle系统课程数据库概念与Oracle安装sql/plus用法详解基本增删改查语句列类型与建表语句正确的查询模型查询子句详解约束连接查询子查询视图目录1-Oracle基础篇索引序列同义词事务函数触发器pl/sql编程匿名块控制结构过程与函数存储过程与存储函数游标目录2-Oracle开发篇sql/plus连接服务器连接并登陆sqlplus"用户名/密码[@主机名as身份]"先连接再登陆sqlplus/nologconn用户名/密码[@主机名as身份]退出:quitSQL>connsys/xxxxxassysdba已连接。SQL>alteruserscottidentifiedbytiger;用户已更改。SQL>alteruserscottaccountunlock;用户已更改。SQL>quit激活普通用户sqlplus中启动实例startup[nomout/mount/open]nomount:仅打开实例mount:再读取控制文件,但不读数据文件open读取数据文件,打开数据库一般在需要备份时,mount默认是openSHUTDOWNNORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。SHUTDOWNTRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。SHUTDOWNIMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。SHUTDOWNABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。关闭数据库的时间从长到短,相反,开启的时候是从短到长sqlplus中关闭实例sqlplus中查看帮助helpindexhelpeditsqlplus做最简单的查询sqlplus的缓冲区我们输入的sql命令,会被sqlplus储存在缓冲区里,熟练利用缓冲区,可以提高我们书写sql的效率因为缓冲区的内容可以修改/删除,再执行用list/l查看缓冲区内容sqlplus缓冲区增加行sqlplus缓冲区删除行sqlplus缓冲区修改行sqlplus与外部编辑器的交互如果觉得通过编辑缓冲区极不方便,可以调用外部编辑器来编辑缓冲区的内容命令为edit可简写为ed缓冲区内容保存到外部文件SAVE----SavesthecontentsoftheSQLbufferinascript.ThebufferhasnocommandhistorylistanddoesnotrecordSQL*Pluscommands.SAV[E][FILE]file_name[.ext][CRE[ATE]|REP[LACE]|APP[END]]SQL>saveD:/orcltest/01.txtreplace已写入fileD:/orcltest/01.txt获取外部文件内容到缓冲区SQL>getD:/orcltest/01.txt1select23+23*fromdualSQL>/3+2----------5直接执行外部文件的内容SQL>startD:/orcltest/01.txt3+2----------5SQL>@D:/orcltest/01.txt3+2----------5SQL>runD:/orcltest/01.txt1select23+23*fromdual3+2----------5sqlplus中使用变量(1)SQL>select5*&multifromdual;输入multi的值:4原值1:select5*&multifromdual新值1:select5*4fromdual5*4----------20交互式变量sqlplus中使用变量(2)提前定义变量SQL>definemulti=3;SQL>select3*&multifromdual;原值1:select3*&multifromdual新值1:select3*3fromdual3*3----------9undefine变量名取消一个变量sqlplus中使用变量(3)参数变量场景:我们执行外部文件时,如果文件内的某部分需要传值,可以用参数变量外部文件格式:selectxxx=&1&2传参格式@外部文件参数1参数2数据类型描述varchar2(n)可变长度的字符串,最大长度4000字符char(n)固定长度的字符串,最大长度2000字符number浮点类型的数据(38位)number(m,n)m为精度,n为小数位数date日期型数据(dd-mm-YY)long可变长度字符串,最大长度2GBraw存储二进制数据的可变长度字符串lob大对象类型,存储大型无结构数据,如影音图像,最大4GB列类型建表语句createtable表名(列名列类型,...);createtable表名asselect列1,列2...列Nfromothoretable;createtable表名asselect列1as新列1,列2as新列2...列Nas新列Nfromothertable修改表的语句-add列altertable表名add(列1数据类型,列2,数据类型....);注意:如果表中已有数据,则新增列不可约束为"NOTNULL"否则报错(?)修改表的语句-drop列作用:删除表中的列语法:altertable表名dropcolumn列名关于删除列的注意事项:原则上,列都可以删但,如果一个列作为主键出现或者作为另1张表的外键,则不能删除修改表的语句-modify列作用:修改表中的列语法:altertable表名modify(列1新数据类型[非空属性]..);关于修改列的注意事项:如果表中没有数据,则列的长度可增加或减小如果已有数据,则只能增大,不能减小.修改表的语句-修改列名作用:修改表中的列名语法:altertable表名renamecolumn旧列名to新列关于表的其他DDL语句删除表:droptable表名改表名:renametable旧名to新名清空表:truncatetable表名truncate清空表数据,且不可恢复,慎重.约束约束概念:约束是加在表上的一种强制性的规则,是保证数据完整性的一种重要手段.当向表中插入或修改数据时,必须满足约束所规定的条件.如性别必须是"男/女",部门号必须是已存在的部门号等等.一般而言,保证数据完整性大致有3种方法程序代码,触发器,约束.约束类型:NOTNULL非空约束UNIQUE唯一性约束PRIMARYKEY主键约束FOREIGNKEY外键约束CHECK检查约束约束的创建(1)建表时创建约束createtable表名(列1数据类型constraint约束名1约束类型,列2数据类型constraint约束名2约束类型,...);练习:创建学员表studentsno学号主键sname姓名非空gender性别只能是男/女birthday生日school学校@path/o/crestu.txt约束的创建(2)createtable表名(列1数据类型,列2数据类型,...constraint约束名1约束类型(列名),constraint约束名2约束类型(列名),...);注意:notnull只能写在列上来约束其他4种都可以列声明之后单独写createtablestu(snonumber,snamevarchar2(30)notnull,emailvarchar2(30),genderchar(2),constraintpkprimarykey(sno),constraintuemailunique(email),constraintchkgencheck(genderin('m','f')))@o/crestu3.txt外键的声明外键的声明稍复杂一点,因为牵涉到另一张表createtable表名(列1列类型contraint约束名foreignkey(列名)references其他表(列名)注意:另一张表被引用的列需是主键或Unique建表后添加约束在需要批量导入数据时,约束会影响导入速度,可以先不要约束,导入完毕后,再添加约束.altertable表名add(constraint约束名约束类型(列名),constraint约束名约束类型(列名));altertable表名modify(列名constraint约束名notnull);//因为notnull类型必须声明在列上,无法声明在表上,所以必须用modify方式来写约束的删除与禁用想改一个约束类型,只能先删除约束再添加新的约束语法:altertable表名dropconstraint约束名;如altertablestudentdropconstraintgen_check注意:如果删除主键约束时,该主键是另一表的外键,则该主键不能直接删除.除非连带把外键约束也删除.如altertabledeptdropconstraintpk_deptcascade;也可以临时禁用1个约束altertable表名disableconsstaint约束名注意:如果禁用约束后加了一些非法数据,再开启约束是会失败的序列sequence序列是一种数据库对象,用来自动生成一组唯一的序号.序列是一种共享式的对象,多个用户可以共同使用序列中的序号.一般将序列应用于表的主键列,这样,当向表中插入数据时,主键列就使用了序列的序号,从而保证主键不会重复.用序列来产生主键,可以获得可靠的主键值.一句话:序列就是序号生成器!序列sequence的创建createsequence序列名incrementbynstartwithnmaxvaluen|nomaxvalueminvaluen|nominvaluecycle|nocyclecachen|nocache练习:1,2,...3,4,5...的序列1,3,5,7,9,999的序列121212的序列序列sequence的使用序列的作用就是为我们提供序号,序列提供了2个伪列,nextval,currval很明显,分别是"下个值","当前值"selectseq1.nextvalfromdual;insertintoxx表(col1,col2)values(seq1.nextavl,yy);序列sequence的修改和删除altersequence序列名选项新值如altersqquence序列名maxvalue5注意:1:不能修改开始值2:修改只影响新产生的值,不影响已产生的值dropsequence序列名同义词同义词就是别名,外号create[public]synonym同义词for用户名.对象名dropsynonym同义词public是所有用户可用的同义词,一般由DBA创建注:scott用户默认没有创建synonym的权限需要授权:grantcreatesynonymtoscott4增删改查之案例过程分析用户注册表单收集,提交数据,注册页面收集到表单的数据后,形成insert语句,user表插入该条数据,用户注册完成.前台用户中心,用户新昵称,根据新昵称和用户id,形成update语句完成昵称修改.管理员后台点击会员列表,此时,网页形成select语句,查询出所有会员的数据,完成会员的查看.管理员后台选中某用户并且删除,捕捉此用户的id,根据用户id形成相应的delete语句,执行delete语句,完成用户的删除.4.1增删改查之增insert图解往哪张表添加行?给哪几列添加值?分别是什么值?往薪资登记表姓名,公司,工资3列添加值分别是'张三','百度',50004.2增删改查之增insert语法INSERTINTO表名(列1,……列n)

VALUES(值1,……值n);允许不写,如果不写,则默认插入所有列见下例:INSERTINTO表名VALUES(值1,……值n);VALUES对应的值的输入顺序与表中字段顺序一致4.3增删改查之改update图解改哪张表?你需要给改哪几列的值?分别改为什么值?在哪些行生效?update表名set列1=新值1,列2=新值2,whereexpr4.4增删改查之删delete语法你要删哪张表的数据?你要删掉哪些行?deletefrom表名whereexpr4.5增删改查之查select语法√查哪张表的数据?你要选择哪些列来查询?要选择哪些行?select列1,列2,..列nfrom表名whereexpr√√7select子句介绍Where条件查询groupby分组having筛选orderby排序zixue.it燕十八精品oracle教程whereexpression用法:expression为真,则该行取出运用场合

各种条件查询场合,如按学号查学生,按价格查商品,按发布时间查新闻等7.1select子句之where介绍7.1select子句之where常用运算符7.1select子句之where匹配取出:张姓的员工?取出张X2个字的员工?like模糊匹配%通配任意字符_通配单一字符7.2select子句之group与统计函数max:求最大min:求最小sum:求总和avg:求平均count:求总行数7.2select子句之group介绍groupby作用:把行按字段分组语法:groupbycol1,col2,...colN运用场合

常见于统计场合,如按栏目计算帖子数,统计每个人的平均成绩等.7.3select子句之having介绍having与where类似,可筛选数据where后的表达式怎么写,having就怎么写where针对表中的列发挥作用,查询数据having针对分组查询的结果发挥作用,筛选组having与where异同点设有成绩表stu如下:姓名 科目 分数张三 数学 90张三 语文 50张三 地理 40李四 语文 55李四 政治 45王五 政治 30试查询两门及两门以上不及格同学的平均分7.3select5种子句之having练习(2)Orderby排序功能按一个或多个字段对查询结果进行排序知识点在本项目案例的运用对栏目的商品按价格由高到低或由低到高排序知识点的运用场合描述

各种排序场合,如取热点新闻,发帖状元等7.3select5种子句之having练习(2)7.4select5种子句之order排序Orderby排序功能按一个或多个字段对查询结果进行排序用法:orderbycol1,col2,col3知识点的运用场合描述

各种排序场合,如新闻按点击量排序,

商品按价格排序等默认排序:升续排列Rownum虚拟列,代表取出的行所在的行号如何取出前3高的工资?如何取出每个部门最高一名的工资?selectrownum应用8.0子查询子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集。一般根据子查询的嵌入位置分为,where型子查询,from型子查询8.1where型子查询where型子查询即是:把内层sql语句查询的结果作为外层sql查询的条件.典型语法:select*fromtableNamewherecolName=(selectcolNamefromtbNamewhere....){wherecolNamein(selectcolNamefromtbNamewhere..)}典型案例:1:查询最新的一条商品2:查询出某大栏目下的所有商品8.2exists型子查询exists即:外层sql查询所查到的行代入内层sql查询,要使内层查询能够成立查询可以与in型子查询互换,但效率要高.典型语法:select*fromtablenamewhereexists(select*fromtableNamewhere...)典型案例:1:查询出某大栏目下的所有商品8.3from型子查询from型子查询即:把内层sql语句查询的结果作为临时表供外层sql语句再次查询.典型语法:select*from(select*fromtableNamewhere...)where....典型案例:1:查询出每个栏目下的最新商品2:BBS中查询每个栏目下的最新帖子9.0连接查询学习内容:左连接右连接内连接应用案例非常广泛如,取文章及所在栏目名称取个人信息及所发布的文章等作用:从2张或多张表中,取出有关联的数据.9.1连接查询之笛卡尔积9.2连接查询之什么是左连接9.3连接查询之连接查询语法左连接的语法.SelectLtable.*,Rtable.*fromLtableleftjoinRltableonLtable.colName=Rtable.colName内连接的语法.SelectLtable.*,Rtable.*fromLtableinnerjoinRltableonLtable.colName=Rtable.colName9.4连接查询之左右连接与内连接的区别1:左右连接可互换AleftjoinB等价于BrightjoinA2:内连接是左右连接的交集3:全外连接是左右连接的并集fullouter10字符串函数concat(字符串1,字符串2)–连接字符串,2个参数chr(),ascii()instr(字符串,子串,start,occurrence)//occu代表第几次出现length(字符串)lower(),upper()lpad(字符串,长度,填充字符),rpad()ltrim(),rtrim(),trim()replace(字符串,子串,替换字符串)substr(字符串,开始位置,长度)10数学函数abs()绝对值ceil()进1取整floor()舍余取整mod()取模round(数据,舍入位置)--位置可以是负trunc(数据,舍入位置)round()与trunc的区别在于round()四舍五入trunc()截取10日期函数add_months(日期,整月数)//计算日期+N月后的新日期last_day(日期)//该日期所在月的最后一天months_between(日期1,日期2)//返回日期相差的月份(浮点型)next_day(日期,周N)//返回最近的周N的日期说明:周日->周六编号12。。。710类型转换函数to_char()把日期/数字转换为字符串例:to_char(hiredate,'yyyy-mm-ddday')to_char(sysdate,'yyyy-mm-ddhh24:mi:ss')to_date()字符串转日期型to_date('12-09-2013','dd-mm-yyyy')to_number(字符串,格式字符串)to_number('1,000.50','999,999,99')10类型转换格式-/| 日期分割符yyyyyy年monthmonmm月,分别是全称,缩写,2位数字ddddd2位数的日,及在1年中的编号ddyday星期。分别是数字,缩写,全称hhhh24 小时appm 上午下午miss 分,秒,逗号位置.小数点的位置9代表10进制00填充$前加$L加本地货币符号视图view

视图是一种虚拟表,本身不保存数据,而是从表中取得的数据。可以理解为表的映射,或更简单的理解为一个查询结果。比如,我们频繁的查询如下语句:selectempno,ename,salfromempwheresal>(selectavg(sal)fromemp);如果把这个语句定义为视图,并从视图查询数据视图view的用途1:视图可以帮我们简化查询如上页中的复杂查询,如果不用视图,则需要子查询才能达到效果2:视图可以帮我更精细的控制权限比如一张表,有工资列,密码列,等,我们可以选择列生成视图,开放给不同的用户,达到列级的权限控制视图view的操作语法创建视图:Createorreplaceview视图名Asselect语句Withreadonly--是否只读Withcheckoption–是否执行约束检查删除视图:Dropview视图名

复杂视图如果select语句中只针对单表进行列的查询,且没有对列进行表达式运算或函数运算,这种称为简单视图。如果对多个表进行查询,或列经过运算,或分组等,这种称为复杂视图。复杂视图不能进行DML操作本质区别:数学上是否一一对应。即任意一行视图的记录,能对应表中唯一的一行,就是简单视图索引index

索引就像字典前的“按拼音/偏旁查询目录”,可以提高查询效率,降低了增删改的效率。*数据库内部常用哈希索引,和btree索引索引index的创建与查询create[unique]index索引名on表名(列1,列2...)建1个列上称为单列索引否则称复合索引索引信息存放在user_indexes,user_ind_columns表删除索引Dropindex索引名索引index的注意事项在where子句中经常使用的列上创建索引大量重复的值加索引意义不大具有唯一值的列是建索引的好的选择,但具体还要看是否经常用他查询。如果where经常用某N个列一些查询,考虑建复合索引索引是有代价的--降低了增删改的速度,并不是加的越多越好。13.0事务之事务的概念思考:我去银行给朋友汇款,我卡上有1000元,朋友卡上500元,我给朋友转账50元(无手续费),如果,我的钱刚扣,而朋友的钱又没加时,网线断了,怎么办?13.1事务之事务的ACID特性原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。组成事务的所有查询必须:要么全部执行,要么全部取消(就像上面的银行例子)。一致性(Consistency):指数据的规则,在事务前/后应保持一致隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消13.2事务之事务的用法开启事务(第1条dml语句即进入事务)执行sql操作(普通sql操作)设置保存点(savepoint保存点)提交/回滚(commit/rollback)部分回滚(rollbackto保存点)事务可以显式的提交,也可以隐式的提交显式:commit隐式:遇到DDL或DCL语句,或退出系统时

会隐式提交13.3事务的隐式提交PL/sql编程概念变量定义自定义变量类型流程控制访问数据库过程与函数函数的递归调用存储过程存储函数异常处理游标触发器PL/sql概念Procedurallanguagesql是一种标准的数据库访问语言,但无法编程,PL/SQL是Oracle公司开发的“方言”,允许编程,是对SQL的一种补充。客户端Sql1Sql2sql3客户端Pl/sql块Sql1Sql2sql3PL/sql的结构declare

变量声明部分begin

执行部分exception

异常处理部分End*:declare和exception部分是可选的默认:调用一个匿名块/存储过程后,只执行不输出学习调试时:setserveroutputonPL/sql中变量的定义变量的定义有2种格式变量名变量类型[约束]default默认值变量名变量类型[约束][:=初始值]-------变量名表名%rowtype变量名表名.列%type变量名另一变量%type铁科院-oracle开发2013-04一个简单的PL/sql块declareinumber:=99;begini:=i+10;dbms_output.put_line(i);end;/注意打开serverout选项PL/sql块中自定义数据类型自定义记录类型recordtypepeopleisrecord(namevarchar2(10),agenumbergenderchar(2));自定义集合类型tabletypecharsetistableofchar;anscharset:=charset('a','b','c','d');铁科院-oracle开发2013-04PL/sql块中流程控制if条件then...endif;if条件then...else...endif;if条件then...elsif条件then...endif;PL/sql块中流程控制loop循环体endloop;exit退出或loop循环体exitwhen条件;endloop;while条件loop循环体endloop;PL/sql块中流程控制for循环变量in[reverse]起始值..终止值loop

循环体

endloop;loop循环体exitwhen条件;endloop;PL/sql访问数据库PL/SQL的主要目的是对数据库进行操作,因此,在PL/SQL块中可以包含select语句,DML语句,还可以包含DCL语句.但不能包含DDL语句.通过SQL语句及流程控制,可以编写复杂的PL/SQL块,对数据库进行复杂的访问.注意,PL/SQL一般是在应用程序中调用.PL/sql查询数据在PL/SQL块中通过selct语句从数据库查询数据并处理,所以select语句下面特殊格式:select列1,列2...into变量1,变量2from表......这样,就把列1,列2的值赋给了变量1,变量2?试着写个过程,统计给定部门的工资与资金PL/sql递归调用declaremnumber;resnumber;functionfact(ninteger)returnnumberisbeginifn=1thenreturn1;elsereturnfact(n-1)+n;endif;end;beginm:=10;res:=fact(m);dbms_output.put_line(m||'之和'||res);end;?试着写个递归过程,查看指定员工的领导..领导的领导...PL/sql异常处理异常的判断语法:exceptionwhen异常1or异常2then语句..;when异常3or异常4then语句...;whenothersthen语句...;

endNO_DATA_FOUND在使用SELECTINTO结构,并且语句返回NULL值的时候;访问嵌套表中已经删除的表或者是访问INDEXBY表(联合数组)中的未初始化元素就会出现该异常TOO_MANY_ROWS常见错误,在使用SELECTINTO并且查询返回多个行时引发。如果子查询返回多行,而比较运算符为相等的时候也会引发该异常。ZERO_DIVIDE将某个数字除以0的时候,会发生该异常ACCESS_INTO_NULL 试图访问未初始化对象的时候出现CASE_NOT_FOUND 如果定义了一个没有ELSE子句的CASE语句,而且没有CASE语句满足运行时条件时出现该异常COLLECTION_IS_NULL 当程序去访问一个没有进行初始化的NESTEDTABLE或者是VARRAY的时候,会出现该异常CURSOR_ALREADY_OPEN 游标已经被OPEN,如果再次尝试打开该游标的时候,会出现该异常DUP_VAL_ON_INDEX 如果插入一列被唯一索引约束的重复值的时候,就会引发该异常(该值被INDEX认定为冲突的)INVALID_CURSOR 不允许的游标操作,比如关闭一个已经被关闭的游标,就会引发INVALID_NUMBER 给数字值赋非数字值的时候,该异常就会发生,这个异常也会发生在批读取时候LIMIT子句返回非正数的时候LOGIN_DENIED 程序中,使用错误的用户名和密码登录的时候,就会抛出这个异常NOT_LOGGED_ON 当程序发出数据库调用,但是没有连接的时候(通常,在实际与会话断开连接之后)PROGRAM_ERROR 当Oracle还未正式捕获的错误发生时常会发生,这是因为数据库大量的Object功能而发生ROWTYPE_MISMATCH 如果游标结构不适合PL/SQL游标变量或者是实际的游标参数不同于游标形参的时候发生该异常SELF_IS_NULL 调用一个对象类型非静态成员方法(其中没有初始化对象类型实例)的时候发生该异常STORAGE_ERROR 当内存不够分配SGA的足够配额或者是被破坏的时候,引发该异常SUBSCRIPT_BEYOND_COUNT 当分配给NESTEDTABLE或者VARRAY的空间小于使用的下标的时候,发生该异常(类似于java的ArrayIndexOutOfBoundsException)SUBSCRIPT_OUTSIDE_LIMIT 使用非法的索引值来访问NESTEDTABLE或者VARRAY的时候引发SYS_INVALID_ROWID 将无效的字符串转化为ROWID的时候引发TIMEOUT_ON_RESOURCE 当数据库不能安全锁定资源的时候引发MITSCN_ERROR 只可使用函数USERENV('COMMITSCN')作为INSERT语句的VALUES子句中的顶级表达式或者作为UPDATE语句的SET子句中的右操作数VALUE_ERROR 将一个变量赋给另一个不能容纳该变量的变量时引发附录:PL/sql预定义异常存储过程与存储函数前面用到的过程和函数都是写在PL/SQL块中,放在缓冲区里.没有进行保存,下次要使用了再次声明,调用.我们可以把过程和函数建立并保存在数据库中,形成一个对象.这种存储后的过程和函数,称为:存储过程存储函数存储过程与存储函数创建语法createorreplaceprocedure名称[(参数)]authidcurrent_user|definer--以定义者还是调用者的身份运行is[不要加declare]变量声明部分begin主体部分exception异常部分end;存储过程与存储函数的删除dropprocedure存储过程名dropfunction函数名游标-cursor游标是一种私有的工作区,用于保存sql语句的执行结果.在执行一条sql语句时,数据库服务区工作区,这里保存了sql语句执行的相关信息工作区有2种形式的游标,隐式的和显式的.隐式游标由数据库自动定义,显示游标由用户自己定义.隐式游标-cursor的属性隐式游标的属性描述SQL%isopen判断游标是否打开sql%rowcount对于增删改,是受影响行数,对于select,值为1sql%found布尔值,是否有值受到影响,对于select,值为1sql%notfound与found相反显式游标-cursor的属性隐式游标的属性描述cursor%isopen判断游标是否打开cursor%rowcount当前已fetch得到的行cursor%found上次fetch是否得到数据cursor%notfound与found相反begindeletefromstudentwheresid=9;ifSQL%ROWCOUNT>0thendbms_output.put_line('影响了');elsedbms_output.put_line('没影响');endif;end;游标-cursor简单例子自定义游标的典型流程cursor游标名[(参数1,参数2..)]isselect语句[forupdate];open游标名fetch游标名to变量1,变量2;close游标名;12.0触发器学习目标:触发器的定义触发器的应用场合掌握触发器的创建语法会创建简单触发器进行数据库应用软件的开发时,我们有时会碰到表中的某些数据改变,希望同时引起其他相关数据改变的需求,利用触发器就能满足这样的需求。它能在表中的某些特定数据变化时自动完成某些查询。运用触发器不仅可以简化程序,而且可以增加程序的灵活性。触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete)12.1触发器定义12.2触发器应用场合1.当向一张表中添加或删除记录时,需要在相关表中进行同步操作。比如,当一个订单产生时,订单所购的商品的库存量相应减少。2.当表上某列数据的值与其他表中的数据有联系时。比如,当某客户进行欠款消费,可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。3.当需要对某张表进行跟踪时。比如,当有新订单产生时,需要及时通知相关人员进行处理,此时可以在订单表上设计添加触发器加以实现12.3触发器创建语法之4要素监视地点(table[列])监视事件insert/update/delete触发事件insert/update/delete触发时间after/before/insteadof

12.4触发器创建语法创建触发器的语法createtrigger触发器名称after/before/insteadof(触发时

温馨提示

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

最新文档

评论

0/150

提交评论