推荐下载-Oracle经典教程_第1页
推荐下载-Oracle经典教程_第2页
推荐下载-Oracle经典教程_第3页
推荐下载-Oracle经典教程_第4页
推荐下载-Oracle经典教程_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

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

文档简介

TOC\o"1-2"\h\z\u走进 2Or4Or5Or10Or17Or18Or192223SQL数据操作和查询 26SQLOr28 31364546子查询和常用函数 4950Or中的伪列 52Or556465表空间、数据库对象 68Or库对象 69同义词 693. 序列 4. 视图 5. 索引 空间 788283PL/SQL程序设计 86PL/SQLPL/SQL块 88PL/SQL92PL/SQL条件控制循环控制 94PL/SQL中态执行SQL句 104PL/SQL106112113Oracle应用于.Net平台 115ADO.NET 116Oracle 中加入Oracle 121126数据库导入导出 129Or导入导出 130EXP130第 1IMP第 1见问题 134走进 Oracle主要内容OracleOracleOracleOracle简介 Lvee的形式存储和管理并且的操作中添加了些面向象的思想。e是eLvr,M的2e官方网站上下载到安装包另服务是收费的。e、i到eSQL开发来说版本之间的差别不大。习eee,不是般人用的其实任何应用程序研发人员来说都是大同小异因为目前多SQL这本书中能习到:的安装管理常用子查询及常用函数PL/SQL编程基本管理了Lve,因此本书的习中认真的完成上机练习是习好本书的键。下来安装开始中基本的概念。Oracle(http://.oracle.)eWindows步”即。解压个文件夹单启动界面。如图:图1 Oracle启动界面eee般e根计算机硬盘大小默认给出个合适位置。时只,然单独创建也上图中选中“创建启动”复选框产员密码。全局名服务器络中唯标识。对e查看服务器条件比如操作系统否符最低要求等。2 Oraclerere3 Oracle默认设置不同有很大差别。4 Oracleeus。如下所示:5 Oracleeun。6 DBCA、控制和日志。创建会有一系列为该提供服务内空间和台进程称为该(,系统会根当前系统性SGA分配非常可观内空间。Oracle服务器可以多个但一个需占用非常大内空间因此一般一个服务器只一个。每一个可以有很Oracle服务器可以多个但一个需占用非常大内空间因此一般一个服务器只一个。每一个可以有很其用用一。不用创建,只当前用。因此Oracle不用程只需用不用户可。创建需设置默认用为管理员预置了两个用别S和时 e测试了普通口令管理可以用设置密码设置否锁。客端用用名和密码登录 系统才操作。7 DBCA8 sySM。e。eLeOracle客eLe工具 Windows“sqlplusw”能够启图9 SQL*PlusSQL*Plus虽然Oracle但现实开发环境对开发不便很少名和密码SQL*Plus与同SQL*Plus虽然Oracle但现实开发环境对开发不便很少SQL*Plus10 SQL*Plus命 令行工具useus”即可启动下11 启动SQL*Plus“sqlplus/nolog”服务器是:conn户名/as服务器字符串说明:身份表户拥有权限。sysdbsamyyr也叫本地网络配置SQL*Plus启动在上并且上一e/后如下所示:图12 连接字符串配置配置本地网络服 务名本地网络名与连接字符串本地网络名配置,安装后使自带(NetConfiguration进行配置:NetConfigurationAssistantNet名配置”选项如下图所示:13 NetConfigurationAssistant接等操作,“添加”项。14 NetConfigurationAssistante1全局数据库名。15 PP协16 选择协议P1IP地址。17 18 测试成功sy的r行测试即可。12中的服务器连接字符串。19 a2PL/SQLDeveloper工具 eLvPL/SQLDeveloper客户端,并且通过配置向导配置后才能正常与器连接。20PL/SQLDeveloperOracle服务 windows。图21Oraclee数据库才能正常启动。这是必须启动。r库器就能直接通信了。s方图22iSQL*Plusgie官(E从geB/S企业管理器在操作系统命令行输入命令:emctlstarte23EM启动启动之后就可以在浏览器输入上EM地址B/S器。Oracle启动和 关闭ee的命令SQL*Plus用户命令格式是:startupopen24Oracleewn25OracleOracle用户 和权限。可以来。其语法是:语法结构:创建用户CREATEUSERIDENTIFIEDBY口[ACCOUNTLOCK|UNLOCK]语法解析:创建用户时是否锁定,默认为锁定状态。锁定的用户无法正常的登录进行数据库操作。代码演示:创建用户SQL>CREATEUSERjerryIDENTIFIEDBYtomACCOUNTUNLOCK;e在se在s中的命令以分号()结尾,代表命令完毕并执行,系统同时会把该命令保存在缓存中,缓存中只保存最近执行过的命令,如果重新执行缓存中的命令,直接使用左斜杠符号(/)。如果命令不以分号结尾,该命令只是写入缓存保存起来,但并不执行。限比如:EN,EE等,拥有系统权限的用户,允许拥有相应的系统操以对所拥有的对象进行对应的操作。还有一个概念就是数据库角色(role),数据库角色就是若干个系统权限的集合。下面个常用角色:CONNECT角色,CONNECTrole(session。RESOURCERESOURCERESOURCE、序列、程(器(trigger)、索引(index)等。DBA角色,DBA拥有所有的系统权限----包括无限制的空间限额和其用户授各种权限的能力。用户 拥有 角色。一下,一个的用户(如T),拥有T和E个角色可进行常规的数据库开发工作。用户对象由拥有该对象的用户语法是:语法结构:授权GRANTTO用户()代码演示:授权SQL>GRANTCONNECTTOjerry;成功。SQL>GRANTRESOURCETOjerry;成功。SQL>语法结构:其他操作//回收REVOKEFROM用户()//修改用户的密码ALTERUSER用户名IDENTIFIEDBY新密码//修改用户处于锁定(非锁定)状态ALTERUSER用户名ACCOUNTLOCK|UNLOCK本章 总结ee。e(。Sql*plus管理和操作客户端工具。客户端链接器前器要启动监听客户端并且在客户端要建立本地网络名。和监听启动后才能进行操作。startup命令启动shutdown命令闭。角色包括了一列统权限和普通权限可以把权限授权给角色把权限或者角色授权给用户。本章练习 Or。Or主要服务作用。Or使用什么命令才能启动和闭。Or权限和角色?他们系是什么?RESOURCE。章节知识结构图 第 2章SQL数据操作和查询 主要内容Oracle数据类型SQL建表和约束SQL对数据增删改SQL查询OracleSQL简 介LrLdeL语句对库表进行增删改操作。开发SQLSQL句进行编译、执行把执行果返回给客户端。SQL句由如下命令组成:删除命令等。T…RErypyL回滚命令。LLreLSQLServer操作上基本致。Oracle库核心表表列使到如下:型 义CHAR(length) 定。length定了如果。0。VARCHAR2(length) 。length定了。0。p) 浮也整p示位是整部分部分p8为s位。日时间纪元4位年月日时分秒时间47121147121231CLOB6XMLBLOB1 OracleNUMBERNUMBER1234.5671234.567RR123.462 Number1 “select…from”完整语法单行mLl了select…语法完整性而创建表和约束创建SQLServer一样命令来完成创建约束则下命令:语法格式:ALTERTABLE命令ADDCONSTRAINTSQLdefaultSQLdefaultdefaultCREATETABLEINFOS案例 :代码演示:Oracle创建表和约束CREATETABLEINFOS(STUIDVARCHAR2(7NOTNULL, --=‘S’+班+2位序号STUNAMEVARCHAR2(10)NOTNULL, --姓GENDERVARCHAR2(2)NOTNULL, 性别 AGENUMBER(2)NOTNULL, --年龄SEATNUMBER(2)NOTNULL, --座ENROLLDATEDATE, --入间STUADDRESSVARCHAR2(50)DEFAULT地址', --住址CLASSNOVARCHAR2(4NOTNULL --班班=期序+班级序号)/ ①②ALTERTABLEINFOSADDCONSTRAINTPK_INFOSPRIMARYKEY(STUID)②/③ALTERTABLEINFOSADDCONSTRAINTCK_INFOS_GENDERCHECK(GENDER='男'ORGENDER='女')③/ALTERTABLEINFOSADDCONSTRAINTCK_INFOS_SEATCHECK(SEAT>=0ANDSEAT<=50) ④/ALTERTABLEINFOSADDCONSTRAINTCK_INFOS_AGECHECK(AGE>=0ANDAGE<=100) ⑤/⑥ALTERTABLEINFOSADDCONSTRAINTCK_INFOS_CLASSNOCHECK((CLASSNO>='1001'ANDCLASSNO<='1999')OR⑥(CLASSNO>='2001'ANDCLASSNO<='2999'))/ALTERTABLEINFOSADDCONSTRAINTSUN_STUNAMEUNIQUE(STUNAME) ⑦/代码解析:e“/②创建一个主键约束。check约束。其是唯一约束表示该列值是唯一的列的值不能重复。SQLServer相同。比如:现有成绩表定义如下:案例2:创建一个成绩表(SCORES)表和约束代码演示:Oracle创建表和约束CREATETABLESCORES(IDNUMBER, --ID ①TERMVARCHAR2(2), --S1或S2STUIDVARCHAR2(7)NOTNULL, --学号EXAMNOVARCHAR2(7)NOTNULL, --考号E+班号+序WRITTENSCORENUMBER(4,1)NOTNULL, --笔试成绩LABSCORENUMBER(4,1)NOTNULL --机试成绩)ALTERTABLESCORESADDCONSTRAINTCK_SCORES_TERMCHECK(TERM='S1'ORTERM='S2')/ALTERTABLESCORESADDCONSTRAINTFK_SCORES_INFOS_STUIDFOREIGNKEY(STUID)REFERENCESINFOS(STUID) ②/代码解析:Lrye序列(Sequence)完成后面章节讲解。②的外键约束定义。数据操纵语言( DML)…后面专门学习该查询)SQLServer作。简 单查询查询是SELECT命令从提取信息。SELECT句法是:语法结构:简单查询SELECT*||WHEREORDERBY语法解析:*示所有列。列名可以选择若干个列名,各个列间逗号分隔。达式可以是列名、函、常等组成达式。WHEREORDERBY要求在查询结果排序,默认是升序。图2 查询语法结构:根据结果集创建表ASSELECT代码演示:根据结果集创建表SQL>CREATETABLEINFOS1ASSELECT*FROMINFOS;TABLECREATEDe2代码演示:复制表结构SQL>CREATETABLEINFOS2ASSELECT*FROMINFOSWHERE1=2;TABLECREATED数据插入 INSERT语法结构:根据结果集创建表TO(2)S)语法解析:代码演示:向 INFOS表和 表据( ①2 林冲男222,3 TO_DATE('20XX-8-906:30:10','YYYY-MM-DDHH24:MI:SS'), ②4 ''1001'5 )6 /1rowinsertedSQL>INSERTINTOINFOSVALUES('s100104','','',26,3,SYSDATE,default,'1001'); ③1rowinsertedSQL>MIT; 代码解析:中的值要与表中列一一SQL*Plus行开始,sqlplus会为每一行前面给出行号。中,日期是国际化的,不同的区域装的数据库,默认的日期格式不同,格式化字符如下:yyyy表示四位年份mm303dd表示两位日期hh24表示0-23,hh120-11。mi表示分钟ss表示秒defaultt正更新到表中,否则其他用户无法查询到当前用户操作的结果。INSERT命令可以把一个结果集一次性插入到一张表中。使用的语句是:INSERTINTO表SELECT子句,如下示例:代码演示:INSERT向表中插入一个结果集SQL>INSERTINTOINFOS2SELECT*FROMINFOS;5rowsinsertedINFOS2INFOINFOINFOS2表中。SQLServer3 Select。代码演示:向表中插入一个常量结果集SQL>INSERTINTOINFOSSELECT's100106','卢俊义','男',23,5,TO_DATE('20XX-8-908:00:10','YYYY-MM-DDHH24:MI:SS'),'青龙寺','1001'FROMDUAL;1rowsinsertedSQL>MIT;更新数据 更新语是:语法结构:UPDATE操作SET1=值2=值……WHERE条件代码演示:UPDATE操作SQL>UPDATEINFOSSETCLASSNO='1002',STUADDRESS='WHERESTUNAME='';1rowsupdatedSQL>mit;删除数据Or语法结构:DELETE操作DELETEFROMWHERE代码演示:DELETE操作1ROWDELETEDSQL>MIT;EL语法结构:TRUNCATEDELETEELEL。EEEEeeT四张表分别是:雇员表(EMP部门表(DEPT工资登记表奖金表请参考本章后面附表接下来很多操作都是该用户下完成算术运算C#-*/(/)结果是浮点数求余能借助函数:MOD(x,y)xy。案例 每名员工年终奖是2000元请显示基本工资2000元以上员工月工资,年总工资。123Eg代码演示:查询中的算术运算SQL>SELECTENAME,SAL,(SAL*12+2000)FROMEMPWHERESAL>2000;ENAMESAL(SAL*12+2000)JONES297537700BLAKE285036200CLARK245031400SCOTT300038000KING500062000FORD3000380006ws关系运算和逻辑运算子句经经常见到常见:=<>!=<><=>=3 OracleSQLServer字符 串连接操作符 (||)e||P代码演示:字符串连接SQL>SELECT(ENAME'isa'JOB)AS"EmployeeDetails" ①FROMEMPWHERESAL>2000;EmployeeDetails------------------------JONESisaMANAGERBLAKEisaMANAGERCLARKisaMANAGERSCOTTisaANALYSTKINGisaPRESIDENTFORDisaANALYSTrowsselected代码解析:①可单引号也可引号别存空格时必须引号列时引号。高级查询第期SQL简单现些新SQL消除重复行 OrDISTINCT代码演示:DISTINCT消除重复行SQL>SELECTDISTINCTDEPTNOFROMEMP;DEPTNO------302010NULL操作 L0NULL为非主键。代码演示:EMP中的NULL值SQL>SELECTENAME,JOB,SAL,MFROMEMPWHERESAL<2000;ENAMEJOBSALMSMITHCLERK800ALLENSALESMAN1600300WARDSALESMAN1250500MARTINSALESMAN12501400TURNERSALESMAN15000ADAMSCLERK1100JAMESCLERK950ws件NULLISNULL作件NULLNOTISNULL。案例 :P代码演示:NULL值查询SQL>SELECTENAME,JOB,SAL,MFROMEMPWHERESAL<2000ANDMISNULL;ENAMEJOBSALMSMITHCLERK800ADAMSCLERK1100JAMESCLERK950MILLERCLERK1300IN 操作 INSALESMAN、PRESIDENT条件两种示方法:WHEREjob='SALESMAN'ORjob='PRESIDENT'ORjob='ANALYST'WHEREjobIN('SALESMAN','PRESIDENT','ANALYST')代码演示:IN操作SQL>SELECTENAME,JOB,SALFROMEMP2 WHEREjobIN('SALESMAN','PRESIDENT','ANALYST');ENAMEJOBSALALLENSALESMAN1600WARDSALESMAN1250MARTINSALESMAN1250SCOTTANALYST3000KINGPRESIDENT5000TURNERSALESMAN1500FORD7rowsselectedANALYST3000还NOT法一样,结果相反。WHEREBETWEEN10002000WHERESAL>=1000ANDSAL<=2000WHERESALBETWEEN1000AND2000BWTWEEN代码演示:BETWEEN操作SQL>SELECTename,job,salFROMEMPWHEREsalBETWEEN1000AND2000;SQL>SELECTename,job,salFROMEMPWHEREsalBETWEEN1000AND2000;ENAMEJOBSALALLENSALESMAN1600WARDSALESMAN1250MARTINSALESMAN1250TURNERSALESMAN1500ADAMSCLERK1100MILLERCLERK130066rowsselectedLIKE模糊 查询LIKE_”:%_E串EE转义与SQLServerESCAPE同。表达式说明'S%'S串。'_S%' S'%30\%%'escape'\'

“30%”“\”指转义\%”在中表示一。表4 通配示例案例 :以J以S。代码演示:LIKE操作SQL>SELECTENAME,JOB,SALFROMEMPWHEREENAMELIKE'J%S';SQL>SELECTENAME,JOB,SALFROMEMPWHEREENAMELIKE'J%S';ENAMEJOBSAL----------------------------JONESMANAGER2975.00JAMESCLERK950.00集 合运算集合运算就是将两或者多结果集组合成为一结果集集合运算括:INTERSECT(查询共有记录。UNIONALL(),返回各查询所有记录,括重复记录。UNION(),返回各查询所有记录,不括重复记录。余记录。。案例 查询出dept表中哪部门下没有员工只需求出dept表中部门号和表中部门号补集即可。代码演示:求补运算SQL>SELECTDEPTNOFROMDEPT2 MINUS3 SELECTDEPTNOFROMSQL>SELECTDEPTNOFROMDEPT2 MINUS3 SELECTDEPTNOFROMEMP;DEPTNO------------4040insertinto…select因union代码演示:用union插入多条数据SQL>INSERTINTODEPT2 SELECT50,'',''SQL>INSERTINTODEPT2 SELECT50,'',''FROMDUAL3 UNION4 SELECT60,'',''FROMDUAL5 UNION6 SELECT70,'',''FROMDUAL7 /3rowsinserted连 接查询Lrr)r)联(leftouterjoin)和右外(rightouterjoin)对两或者之间外(+)。2000元员工姓名门工作工资。由于门名称dept其他信息emp需要才能完成。代码演示:内联接SQL>SELECTSQL>SELECTe.ENAME,e.JOB,e.SAL,d.DNAMEFROMempe,deptdWHEREe.deptno=d.deptno4 ANDe.SAL>2000;ENAME JOBSALDNAMEJONES MANAGER2975RESEARCHBLAKE MANAGER2850SALESCLARK MANAGER2450ACCOUNTINGSCOTTANALYST3000RESEARCHKINGPRESIDENT5000ACCOUNTINGFORD6wsANALYST3000RESEARCH代码演示:内联接SELECTe.ENAME,e.JOB,e.SAL,d.DNAMEFROMEMPeINNERJOINDEPTdONe.DEPTNO=d.DEPTNOWHEREe.SAL>2000INNERJOININNER案例案例分析:pottDept代码演示:外联接SQL>SELECTe.ENAME,e.JOB,e.SAL,d.DNAME2 FROMEMPe,DEPTdSQL>SELECTe.ENAME,e.JOB,e.SAL,d.DNAME2 FROMEMPe,DEPTdWHERE e.DEPTNO(+)=d.DEPTNO ①4 /4 /ENAMEJOBSALDNAMESMITHCLERK800RESEARCHALLENSALESMAN1600SALESWARDSALESMAN1250SALESJONESMANAGER2975RESEARCHMARTINSALESMAN1250SALESBLAKEMANAGER2850SALESCLARKMANAGER2450ACCOUNTINGSCOTTANALYST3000RESEARCHKINGPRESIDENT5000ACCOUNTINGTURNERSALESMAN1500SALESADAMSCLERK1100RESEARCHJAMESCLERK950SALESFORDANALYST3000RESEARCHMILLERCLERK1300ACCOUNTINGOPERATIONS18ro18rowsselected① 专用的联接符,在条件中出现在左边指右外联接,出现在右边指左外联接。也可以使用SQL/92标准的写法:代码演示:外联接SELECTe.ENAME,e.JOB,e.SAL,d.DNAMEFROMEMPeRIGHTOUTERJOINDEPTdONe.DEPTNO=d.DEPTNOOracle自身的联接查询语法比较好写,同时容易理解,但是为了程序便于移植,SQLServer获得一致。Oracle自身的联接查询语法比较好写,同时容易理解,但是为了程序便于移植,SQLServer获得一致。本章 总结eLLLLDML包括增删改查包括数、REVOKEMIT、字类型日期date。

,default的增删改SQLServerINSERT、、DELETE完成。高级查询、NULL、IN、BETWEENAND。集合作:UNION、UNIONALL、、MINUS。联接查询内联接和外联接。本章练习 Dallas、变化以及King直接管理以及资。能获得样资奖金其他、以及资。表中EMP表:表序号列名类型说明1EMPNONUMBER(4)编号EMP2ENAMEVARCHAR2(10)3JOBVARCHAR2(9)4MGRNUMBER(4)领导编号EMPNO5HIREDATEDATE6SALNUMBER(7,2)资7MNUMBER(7,2)奖金8DEPTNONUMBER(2)编号DEPT外键。表中DEPT表:表序号列名类型说明1DEPTNONUMBER(2)编号主键2DNAMEVARCHAR2(14)称3LOCVARCHAR2(13)表中表:资等级表序号列名类型说明1GRADENUMBER等级2LOSALNUMBER此等级下最低资3HISALNUMBER此等级下最高资章节知识结构图 第 3章子查询和常用函数 主要内容子查询伪列锁的概念子查询SELECTDELETESELECTSELECT语案例 :案例分析EmpDeptEmppL代码演示:单行子查询SQL>SELECTENAME,JOB,SALFROMEMP2 WHEREDEPTNO=(SELECTDEPTNOFROMDEPTWHEREDNAME='SALES') ①3 /ENAME JOB ALLENSALESMAN1600WARDSALESMAN1250MARTINSALESMAN1250BLAKEMANAGER2850TURNERSALESMAN1500JAMESCLERK950ws代码解析:①要注意:DEPTNONULL>=<>案例 :p“)、。案例分析Emp有很每人工资相“工工资<Y后面示“”思。代码演示:ANY子查询SQL>SELECTENAME,JOB,SALFROMEMP2 WHERESAL<ANY(SELECTSALFROMEMPWHEREJOB='SALESMAN') ①3 /ENAMEJOBSALSMITHCLERK800JAMESCLERK950ADAMSCLERK1100WARDSALESMAN1250MARTINSALESMAN1250MILLERCLERK1300TURNERSALESMAN1500ws代码解析:①<值都小最大值小那么示最小大。案例 :。案例分析ANYALLALL代码演示:ALL子查询SQL>SELECTENAME,JOB,SALFROM2 WHERESAL>ALL(SELECTSALFROMEMPWHEREJOB='SALESMAN') ①3 /ENAME JOB JONESMANAGER2975BLAKEMANAGER2850CLARKMANAGER2450SCOTTANALYST3000KINGPRESIDENT5000FORD6wsANALYST3000代码解析:①>ALL:结果值还大也是说结果最大值还大。<ALL最小值还小。对于还NOTIN进行Oracle在Or过程实际还些附加列称为伪列伪列像列样。ROWIDD快速定位某行由返回是该行物理地址因此显行是如何存储代码演示:ROWIDSQL>SELECTROWID,ENAMEFROMEMPWHERESAL>2000;SQL>SELECTROWID,ENAMEFROMEMPWHERESAL>2000;ROWID ENAME6rowsselectedJONESBLAKECLARKKINGFORD6rowsselectedROWWMWDWDWWMWDWDWMROWID是物理地址。ROWNUM是次序。出员工表5名员工姓名工作工资。代码演示:ROWNUMSQL>SELECTROWNUM,ENAME,JOB,SALFROMEMPWHEREROWNUM<=5;ROWNUMENAMEJOBSAL1SMITHCLERK8002ALLENSALESMAN16003WARDSALESMAN12504JONESMANAGER29755MARTINSALESMAN1250案例 :5案例分析“55ROWNUM操作比排序1语句中直接加上Orderby就行,而是需要对排序结果重新做二次,产生新才能作为条件依据。代码演示:ROWNUM应用①2(SELECTENAME,JOB,SAL3FROMEMPORDERBYSALDESC)T ②4 WHEREROWNUM<=55 /ROWNUMENAMEJOBSAL1KINGPRESIDENT50002SCOTTANALYST30003FORDANALYST30004JONESMANAGER29755代码解析:BLAKEMANAGER2850①T是子②别,这里是第二次后。案例 :表P第5第10。案例分析ROWNUM还任何结果。代码演示:分页SQL>SELECT*FROM2(SELECTSQL>SELECT*FROM2(SELECTROWNUMR,ENAME,JOB,SAL ①3FROMEMPWHEREROWNUM<=10) ②4WHERER>5③5/RENAMEJOBSAL6BLAKEMANAGER28507CLARKMANAGER24508SCOTTANALYST30009KINGPRESIDENT500010TURNERSALESMAN1500代码解析:R记录,供外层条件使用。②内部查询的ROWNUM,与外出的ROWNUM列是平等的两列。R是正常的一列。OracleOracleSQLSQL数据库中主要使用两种类型的函数:MOD(x,y)xy的余数(xy可以是两个整数,也可以是表中的整数列。常用的单行函数有:字符函数:对字符串操作。数字函数:对数字进行计算,返回一个数字。转换函数:可以将一种数据类型转换为另外一种数据类型。日期函数:对日期和时间进行处理。返回结果集中x列的总合。字符函数列出了常用的字符函数。函数函数说明ASCII(x)CONCAT(x,y)ASCII(x)CONCAT(x,y)INSTR(x,str[,start][,n)LENGTH(x)LOWER(x)UPPER(x)LTRIM(x[,trim_str])RTRIM(x[,trim_str])TRIM([trim_strFROM]x)REPLACE(x,old,new)xASCII连接xy。在x中查找str,可以指定从start开始,也可以指定从第n次开始。x长度。x转换为小写。x转换为大写。xtrim_str串,缺省截去空格。xtrim_str串,缺省截去空格。xtrim_str串,缺省截去空格。x。xstaartlength个,缺省length,默认到结尾。表1 函数示例示例SELECTASCII('a')FROMDUALSELECTCONCAT('Hello','world')FROMDUALSELECTINSTR('Helloworld','or')FROMDUALSELECTLENGTH('Hello')FROMDUALSELECTLOWER('hElLO')FROMDUAL;SELECTUPPER('hello')FROMDUALSELECTLTRIM('===HELLO===','=')FROMDUAL示例结果SELECTHELLO===')FROMDUALSELECTRTRIM('===HELLO===','=')FROMDUALSELECTHELLOFROMDUALSELECTTRIM('='FROM'===HELLO===')FROMDUALSELECTREPLACE('ABCDE','CD','AAA')FROMDUALSELECTSUBSTR('ABCDE',2)FROMDUALSELECTSUBSTR('ABCDE',2,3)FROMDUAL97Helloworld85helloHELLO==HELLO======HELLO=HELLO=HELLOABAAAEBCDEBCD表2 函数示例数字函数 数函数接受数参数,参数可以来自表中一列,也可以是一个数表达式。函数函数说明示例ABS(x)ACOS(x)COS(x)CEIL(x)FLOOR(x)LOG(x,y)ABS(x)ACOS(x)COS(x)CEIL(x)FLOOR(x)LOG(x,y)MOD(x,y)POWER(x,y)ROUND(x[,y])SQRT(x)TRUNC(x[,y])xxxxxyxyxyxyxxyABS(-3)=3ACOS(1)=0COS(1)=1.57079633CEIL(5.4)=6FLOOR(5.8)=5LOG(2,4)=2MOD(8,3)=2POWER(2,3)=8SQRT(4)=2TRUNC(3.456,2)=3.453 说明:)。y时y=0ROUND(3.56)=4。y是正整就是到y。ROUND(5.654,2)=5.65。y是负整到|y|ROUND(351.654,-2)=400。 )。y时y=0TRUNC(3.56)=3。y是正整就是到y。TRUNC(5.654,2)=5.65。y是负整到|y|TRUNC(351.654,-2)=300。日期 函数日期日期进行运算。常用日期有:)ddn。1 ADD_MONTHS2 d“11下。“H1一“第二Y下周周3 ROUNDDCD只M)、H、、R、ER、、可以HOURMINUTE必。HOUR匹配结果没有加上区因此在国运8小4 EXTRACT转换 函数TO_CHAR(d|n[,fmt])fmt代码演示:TO_CHAR对日期的处理SQL>SELECTTO_CHAR(SYSDATE,'YYYY""MM""DD""HH24:MI:SS')①2 FROMDUAL;date-----------------------20XX081112:06:00代码解析:参示例说明9.,$EEEELPR9999.999,99$9999.99EEEEL999参示例说明9.,$EEEELPR9999.999,99$9999.99EEEEL999999PR指位置处显示指位置返回小点指位置返回个逗号开头返回个美元号科计法表示加个本地货币号如果负则尖括号进行表示表4 代码演示:TO_CHAR对数字的处理SQL>SELECTTO_CHAR(-123123.45,'L9.9EEEEPR')"date"2 FROM3 /date--------------------1.2E+05>fmt。fmt数。fmt。代码演示:TO_NUM函数SQL>SELECTTO_NUMBER('-$12,345.67','$99,999.99')"NUM"2 FROM3 /NUM----------------12345.67其 他单行函数x。2000元下的员工如果没有发奖金100代码演示:NVL函数SQL>SELECTENAME,JOB,SAL,NVL(M,100)FROMEMPWHERESAL<2000;ENAMEJOBSALNVL(M,100)SMITHCLERK800100ALLENSALESMAN1600300WARDSALESMAN1250500MARTINSALESMAN12501400TURNERSALESMAN150050ADAMSCLERK1100100JAMESCLERK9501007rowsselectedx。案例 :P00100代码演示:NVL2函数SQL>SELECTENAME,JOB,SAL,NVL2(M,m+100,200)"m"2 FROMEMPWHERESAL<2000;ENAMEJOBSALmSMITHCLERK800200ALLENSALESMAN1600400WARDSALESMAN1250600MARTINSALESMAN12501500TURNERSALESMAN1500150ADAMSCLERK1100200JAMESCLERK950200MILLERCLERK1300200rowsselected聚合 函数AVG)SUMSUM()MIN、MAX最小、最大值MIN()、MAX()COUNT统计5COUNT()案例 :代码演示:SUM函数SQL>selectsum(sal)fromSUM(SAL)----------------29025案例 :代码演示:函数下的分组查询SQL>SELECTDEPTNO,AVG(SAL)FROMEMPGROUPBYDEPTNO;DEPTNO AVG(SAL)--------- 30 1566.6666620 217510 2916.66666本章 总结OrEXTRACT能够获取日期中某个段值。能够把和日期转换成固定能够把固定格式串转换为日期类型。子查询中返回单行子查询和返回多行子查询。Or、本章练习 。EXTRACT。你知道有哪些关于日期?章节知识结构图 第 4章表空间 、数据库对象主要内容同义词概念序列的应用视图的概念索引的概念表空间的概念Oracle数据库对象 e同 义词yye语法结构:同义词CREATE[ORREPLACE][PUBLIC]SYSNONYM[schema.]synonyFOR[schema.]object_name语法解析:①ERE]新代替旧②C③和该下全称.schema.object_name。如果其他时全称来比如:代码演示:用户访问 Scott用户的 表SQL>connsystem/manager@orcl;toasSQL> SELECTENAME,JOB,SALFROMSCOTT.EMPWHERESAL>2000; ①ENAMEJOBSALJONESMANAGER2975BLAKEMANAGER2850CLARKMANAGER2450SCOTTANALYST3000KINGPRESIDENT5000FORDANALYST30006rowsselected代码解析:①管理员用户可以访问任何用户的数据库对象,SYSTEM用户访问SCOTT用户的EMP表时,必须使用SCOTT.EMP。案例 :户o有T和E为用户的EMP表创建同义词,并通过同义词访问该EMP表。代码演示:创建同义词并访问SQL>CONNsystem/manager@orcl;ConnectedtoOracleDatabase10gEnterpriseEditionRelease.0ConnectedasSQL>CREATEUSERXiaoMeiIDENTIFIEDBYXiaoMei; ①UsercreatedSQL>GRANTCONNECTTOXiaoMei;GrantsucceededSQL>GRANTRESOURCETOXiaoMei;GrantsucceededSQL>GRANTCREATESYNONYMTOXiaoMei;GrantsucceededSQL>CONNXiaoMei/XiaoMei@ORCL;ConnectedtoOracleDatabase10gEnterpriseEditionRelease.0ConnectedasXiaoMeiSQL>CREATESYNONYMFORSCOTT.EMP; ②SynonymcreatedSQL>SELECT*FROMMYEMP; ③SELECT*FROMMYEMPORA-00942:SQL>CONNECTSCOTT/tiger@ORCLConnectedtoOracleDatabase10gEnterpriseEditionRelease.0ConnectedasSCOTTSQL>GRANTALLONEMPTOXiaoMei; ④GrantsucceededSQL>CONNECTXiaoMei/XiaoMei@ORCL;ConnectedtoOracleDatabase10gEnterpriseEditionRelease.0ConnectedasXiaoMeiSQL> SELECTENAME,JOB,SALFROMWHERESAL>2000; ⑤ENAMEJOBSALJONESMANAGER2975BLAKEMANAGER2850CLARKMANAGER2450SCOTTANALYST3000KINGPRESIDENT5000FORDANALYST30006rowsselected代码解析:XiaoMeiXiaoMei角XiaoMei。XiaoMei只能在XiaoMei用户下使用。访问MyEmp就是访问SCOTT.EMP对象。piXiaoMeiTP。语法结构:删除同义词DROP[PUBLIC]SYNONYM[schema.]sysnonym_name语法解析:①C②只能被拥或者管理员此命令只能能源序列 序列中升序生成也降序生成创建序列语法结构:创建序列CREATESEQUENCEsequence_name[STARTWITHnum][INCREMENTBYincrement][MAXVALUEnum|NOMAXVALUE][MINVALUEnum|NOMINVALUE][CYCLE|NOCYCLE][CACHEnum|NOCACHE]语法解析:①TH-。②T。。E10-。E。0。。EEOr20案例 :11E30代码演示:生成序列号SQL>CREATESEQUENCEMYSEQMINVALUE1STARTWITH1NOMAXVALUEINCREMENTBY1NOCYCLECACHE8 /Sequencecreated“伪”别访问前代码演示:序列使用SQL>SELECTMYSEQ.NEXTVALFROMDUAL;NEXTVAL----------1SQL>SELECTMYSEQ.NEXTVALFROMDUAL;NEXTVAL----------2SQL>SELECTMYSEQ.CURRVALFROMCURRVAL----------2。DROPSEQUENCE命令删除一个对象。代码演示:序列修改和删除SQL>ALTERSEQUENCEMYSEQMAXVALUE10000MINVALUE4 /SEQUENCEALTEREDSQL>DROPSEQUENCEMYSEQ;SEQUENCEDROPPED视图 方法完全相同。只需要简单即。视图具优点:表。将复杂查询保存为视图。对最终户屏蔽一定复杂性。安全性。从多张基表中按一定业务逻辑抽出户关心部分形成一张虚拟表。语法结构:创建视图CREATE[ORREPLACE][{FORCE|NOFORCE}]VIEWview_nameASSELECT[WITHREADONLYCONSTRAINT]语法解析:ORREPLACEHDtHDY案例 :PT代码演示:视图SQL>CREATEORREPLACEVIEWEMPDETAILASSELECTEMPNO,ENAME,JOB,HIREDATE,EMP.DEPTNO,DNAMEFROMEMPJOINDEPTONEMP.DEPTNO=DEPT.DEPTNOWITHREADONLY6 /VIEWCREATEDSQL>SELECT*FROMEMPDETAIL;EMPNO ENAME JOB①HIREDATEDEPTNODNAME7369 SMITH CLERK17-12月-8020RESEARCH7499 ALLEN SALESMAN20-2月-8130SALES7521 WARD SALESMAN22-2月-8130SALES7566 JONES MANAGER02-4月-8120RESEARCH7654 MARTIN SALESMAN28-9月-8130SALES7698BLAKEMANAGER01-5-8130SALES7782CLARKMANAGER09-6-8110ACCOUNTING7788SCOTTANALYST19-4-8720RESEARCH7839KINGPRESIDENT17-11-8110ACCOUNTING7844TURNERSALESMAN08-9-8130SALES7876ADAMSCLERK23-5-8720RESEARCH7900JAMESCLERK03-12-8130SALES7902FORDANALYST03-12-8120RESEARCH7934MILLERCLERK23-1-8210ACCOUNTING14ROWSSELECTED代码解析:PW。索引 定位到页这种做法前提是页面编号是有序能从第页开始,页页找如果某些字段经常被并作为条件出现时,就应考虑为列创建索引。条基本的准则是:当任何单个要检索少于或者等于整个数10%时,索引就非常有(Index),而列数据是无序时只能从第开始匹配创建索引就是某些特如果某些字段经常被并作为条件出现时,就应考虑为列创建索引。条基本的准则是:当任何单个要检索少于或者等于整个数10%时,索引就非常有语法结构:创建索引CREATE[UNIQUE]INDEXindex_nameONtable_name(column_name[,column_name…])语法解析:UNIQUE:eee案例 :PEPJOB代码演示:创建索引SQL>CREATEUNIQUEINDEXUQ_ENAME_IDXONEMP(ENAME); ①IndexcreatedSQL>CREATEINDEXIDX_SALONEMP(SAL); ②IndexcreatedSQL>CREATEINDEXIDX_JOB_LOWERONEMP(LOWER(JOB)); ③Indexcreated代码解析:①ENAME②SAL③中能经常使用job作条件达式JOB中所转换后而使用函基于函te一进行排序重复越少果越明显。ee。表 空间eee1 、e创建创建名称为字典视及结命创建数据。TMEP时序户执了诸by等后服务器需选进序内序区装下太就需序结写硬盘户自定义户创建需考虑分区e分区段连续e分区e最单位后先申请Insert语法是:语法结构:创建表空间CREATETABLESPACE名称DATAFILE文件名1SIZE字M[,'文件名2'SIZE字….]EXTENTMANAGEMENTLOCALUNIFORMSIZE字M语法解析:M”为单位可以有多文件。EXTENTMANAGEMENTLOCAL指明类型是:本地管理本地管理(ExUNIFORMSIZE:指定每统案例 :是5M求xt的统为1M。代码演示:创建表空间SQL>CREATETABLESPACEMYSPACEDATAFILE'D:/A.ORA'SIZE10M,'D:/B.ORA'SIZE5MEXTENTMANAGEMENTLOCALUNIFORMSIZE6 /Tablespacecreated必须是管理员户才能当足可以命令向追加文件扩充代码演示:扩充表空间SQL>ALTERTABLESPACEMYSPACE2 ADDDATAFILE'D:/C.ORA'SIZE10M3 /Tablespacealtered。那么该户下的所有数据库对象(比如)默认都存储该中。代码演示:为某一用户指定默认表空间SQL>CREATEUSERACONGIDENTIFIEDBYACONGDEFAULTTABLESPACEMYSPACE3 /Usercreated创建中数据存放户的默认中也通过子句为指定中数据存放其他中。代码演示:为表指定表空间SQL>CREATETABLE2 (IDNUMBER,TERMVARCHAR2(2),STUIDVARCHAR2(7)NOTNULL,EXAMNOVARCHAR2(7)NOTNULL,WRITTENSCORENUMBER(4,1)NOTNULL,LABSCORENUMBER(4,1)NOTNULL9 )10 TABLESPACEMYSPACE11 /Tablecreated创建索引也为索引指定。代码演示:为索引指定表空间SQL>CREATEINDEXUQ_IDONSCORES(ID)2 TABLESPACEMYSPACE;Indexcreated本章 总结Or只EM。。LL下值。视图预处查询语句,从若干表中过滤组合索引及基于函索引此外还位图索引、反向索引等。表空间文件组提供统空间本章练习 T0010。DEPTDEPT3条记录。DEPTPBE销售部记录。EMPENAME创建唯索引。EMPSAL创建普通索引。(oi姓名为户默认空间。章节知识结构图 第 5章PL/SQL程序设计 主要内容PL/SQL数据类型PL/SQL条件和循环控制动态执行 SQLPL/SQLPL/SQL简介 SQLOraclePL/SQLuluLeL而且还条件、循环等SQL数处理能力缝形成编可以创建和函以及序包。L引擎分析收PL/SQL块中内容把其中PL/SQL引擎去执PL/SQL块中SQL交给服务器SQL执器执如图图1 PL/SQLPL/SQL块送给服务器编执PL/SQL块如序)可以编中执PL/SQL:SQLSQL纵SQL、、务、SQL函、和。L和L紧密集LL和L。面向象程PL/SQL编PL/SQL中可以创建可以可以序中重载方等。好性能SQLPL/SQLPL/SQL块统一进行编译后执行,同时还可以把编译好的PL/SQL块存储起来,以备重用,减少了应用程序和服务器之间的通信时间,PL/SQL是快速而高效的。可移植性使用PL/SQL编写的应用程序,可以移植到任何操作系统平台上的Oracle服务器,同时还可以编写可移植程序库,在不同环境中重用。安全性可以通过存储过程对客户机和服务器之间的应用程序逻辑进行分隔,这样可以限制对Oracle数据库的访问,数据库还可以授权和撤销其他用户访问的能力。PL/SQLPL/SQLPL/SQL程序包含了一个或者多个逻辑块,逻辑块中可以声明变量,变量在使用之前必须先声明。除了正常的执行程序外,PL/SQL还提供了专门的异常处理部分进行异常处理。每个逻辑块分个部分,语是:语法结构:PL/SQL块的语法[DECLARE①BEGIN--executablestatements ②[EXCEPTION--exceptionstatements] ③END;语法解析:DECLARE开始,如果不声明变量或者常量,可以省略这部分。PL/SQLBEGIN结尾。所有的可执行PL/SQL语句都放在这一部分,该部分执行命令并操作变量。PL/SQL块可以作子块嵌套在该部分。块的执行部分是必选的。注END关键字后面用分号结尾。③异常处理部分:该部分是可选的,该部分用EXCEPTION关键字把可执行部分分成两个小部分,之前的程序是正常运行的程序,一旦出现异常就跳转到异常部分执行。PL/SQLaC#还有自身的语言特性:PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以是多行的,但分号表示该语句结束。一行中可以有多条SQL语句,他们之间以分号分隔,但是不推荐一行中写多条语句。PL/SQL中的特殊符号说明:类型符号说明赋值运算符:=JavaC#PL/SQL的赋值是:=||字符符。--PL/SQL中的行。特殊字符/*,*/PL/SQL中的多行,多行不。<<,>>标分隔符。为了标程序特殊。..符,比如:1..5标到5算运算符+,-,*,/**算运算符。,比如:3**2=9

>,<,>=,<=,= 关运算符,=表示关,不是赋值。<>,!= 不关。运算符 AND,OR,NOT 运算符。表1 PL/SQL中的特殊符号和运算符变量声明PL/SQL持SQL中的数据类型,PL/SQL中正常持SQL初始化声明必须在声明部分。声明变量的语法是:语法格式:声明变量变量名 型[:=初始值]语法解析:。代码演示:声明变量SQL>DECLAREsnameVARCHAR2(20):='jerry'; ①BEGINandtom'; ②dbms_output.put_line(sname); ③END;/jerryPL/SQLproceduresuccessfullypleted代码解析:ey引使两单引(’’)来表示即单引同时也具有转义的作e。e在sttn控制台上。T…O是查询的结只能行记录不能零行或者多行记录。代码演示:变量赋值SQL>DECLAREsnameVARCHAR2(20)DEFAULT'jerry'; ①BEGINSELECTenameINTOsnameFROMempWHEREempno=7934; ②dbms_output.put_line(sname);END;7 /PL/SQLproceduresuccessfullypleted代码解析:时使关键字对进行select…sname声明常量代码演示:声明常量SQL>DECLAREpiCONSTANTnumber:=3.14; --①rnumberDEFAULT3; --3 ②areanumber; --BEGINarea:=pi*r*r; --dbms_output.put_line(area); --END;9 /28.26PL/SQLproceduresuccessfullypleted代码解析:T:=sPL/SQL“:名”代码演示:宿主常量SQL>varemp_namevarchar(30); ①SQL>BEGINSELECTenameINTO:emp_nameFROMempWHEREempno=7499; ②END;4 /PL/SQLproceduresuccessfullypletedemp_name---------ALLENSQL>printemp_name; ③emp_name---------ALLEN代码解析:L:。SQL*Plusprint输出的结果。PL/SQL数据类 型面建表OracleSQLPL/SQL音等非结构化的大数据类型数据类型)等下面列举一些常的类型。标量数据类 型标数据类型的标日期型和布尔型SQLPL/SQL自身附加的数据类型字符型和数字型又有子类型,子类型只与限定的范围有关,比如NUMBER类型表示整数,也POSITIVE只表示正整数。类型类型说明SQLPL/SQL最VARCHAR2(长度)PL/SQL没有默认长度,因此必须指定。NUMBER(精度,小数) OracleSQL定义的数据类型,见第二章。OracleSQL定义的日期类型,见第二章。长度)OracleSQL定义的日期类型,见第二章。OracleSQL字节,默认LONG

OracleSQLOracleSQLBOOLEAN PL/SQLTRUENULLBINARY_INTEGER PL/SQL-231231PL/SQL-231NATURAL

RRLR0NULL。E LRPOSITIVEN POSITIVEPOSITIVENULL。L reL18T reLNUMBERDE38SIGNTYPE PL/SQLR1。STRING 2 属性数据类型 reEE。%ROWTYPEDLC#代码演示:SQL>DECLAREEMP%ROWTYPE; ①BEGINSELECT*INTOFROMempWHEREempno=7934; ②dbms_output.put_line(myemp.ename); ③END;7 /PL/SQLproceduresuccessfullypleted代码解析:myempEMPEMPmyemp“。%TYPE引某变量或者数据库列类型作为某变量数据类型。代码演示:%TYPE应用SQL>DECLAREsalemp.sal%TYPE; ①number(4):=3000;totalsalmysal%TYPE; ②BEGINSELECTSALINTOsalFROMempWHEREempno=7934;totalsal:=sal+mysal;dbms_output.put_line(totalsal);END;10 /4300PL/SQLproceduresuccessfullypleted代码解析:salempsal列类型。totalsalmysal类型。%TYPE引某列作类型为变量数据类型也引某变量类型作为新变量数据类型。PL/SQL条 件控制和循环控制PL/SQL程序通过件或循环结构来控制命令执流程PL/SQL提供了丰富流程控制语句C#样也有三种控制结构:条 件控制C#ifPL/SQLIF-THEN、IF-THEN-ELSEIF-THEN-ELSIFCASE。IF-THENEC#fC#ifPL/SQLIFIFTHEN--}ENDIF;3PL/

温馨提示

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

评论

0/150

提交评论