北大青鸟oracle培训教程267页.ppt
第一章,Oracle 入门,2,课程地位,.Net&C#,SQL Server,XML,SPM,ASP.NET&WebService,Oracle,UML,SPR:Computer Base,HTML&JavaScript,SQL Server Base,OOP&Java Base,C,STB,JSP/Servlet,EJB&WebService,WinForms,Struts&JSF,Testing&SQA,Linux,3,课程目标,理解 Oracle 数据库体系结构熟练掌握 SQL 命令和 SQL 函数使用 Oracle 的各种数据库对象使用 PL/SQL 编写存储过程掌握基本的数据库配置和管理,4,目标,了解 Oracle 体系结构的各种组件 掌握 Oracle 中的基本用户管理 了解 Oracle 的工具 了解 Oracle 的安装和卸载,5,Oracle 数据库简介 2-1,对象关系型的数据库管理系统(ORDBMS)在管理信息系统、企业数据处理、因特网及电子商务等领域使用非常广泛在数据安全性与数据完整性控制方面性能优越跨操作系统、跨硬件平台的数据互操作能力,Oracle数据库的主要特点支持多用户、大事务量的事务处理数据安全性和完整性控制支持分布式数据处理可移植性,6,Oracle 数据库简介 2-2,Oracle数据库基于客户端/服务器技术,客户端应用程序通过向服务器请求并接收信息的方式与数据库进行交互。它充当用户与数据库之间的接口,请求,响应,数据库服务器对数据库表进行最佳管理,处理多个客户端对同一数据的并发访问。全面地保持数据完整性,并控制数据库访问权限等安全性需求,网络,7,Oracle 9i 体系结构,Oracle 服务器,Oracle 数据库,Oracle 实例,Oracle 数据库是一个数据的集合,该集合被视为一个逻辑单元,管理数据库的后台进程和内存结构的集合称为 Oracle 实例,数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制Oracle服务器提供开放、全面和综合的信息管理,它由Oracle数据库和Oracle实例组成,8,Oracle 主要组件,实 例 内存结构 后台进程,PMON SMON DBWR LGWR CKPT 其他,数据库,数据文件,数据文件,数据文件,控制文件,控制文件,日志文件,日志文件,参数文件,归档日志文件,口令文件,SGA,用户进程,服务器进程,PGA,共享池,数据缓冲区,日志缓冲区,9,Oracle 实例,Oracle 实例是后台进程和内存结构的集合,Oracle 实例,系统全局区,后台进程,分配,启动,10,Oracle 数据库,Oracle 数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区Oracle 数据库包括逻辑结构和物理结构,物理结构,逻辑结构,物理结构包含数据库中的一组操作系统文件。,逻辑结构指数据库创建之后形成的逻辑概念之间的关系,Oracle 数据库,11,会话,会话是用户与 Oracle 服务器的单个连接当用户与服务器建立连接时创建会话当用户与服务器断开连接时关闭会话,启动 Oracle 实例,使用SQL*Plus连接至数据库,创建用户进程,创建服务器进程,提交 SQL 查询,12,Oracle 实例内存结构,系统全局区(SGA),程序全局区(PGA),Oracle 实例启动时分配系统全局区,当服务器进程启动时分配程序全局区,Oracle 的内存结构包含以下两个内存区:,内存区,13,系统全局区 2-1,数据库信息存储于SGA,由多个数据库进程共享,共享池,数据缓冲区,日志缓冲区,SGA的内存结构,14,系统全局区 2-2,共享池,共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域共享池由库缓存和数据字典缓存组成。共享池的大小直接影响数据库的性能。,数据缓冲区,用于存储从磁盘数据文件中读入的数据,所有用户共享。服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。数据缓冲区的大小对数据库的读取速度有直接的影响。,日志缓冲区,日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。相对来说,日志缓冲区对数据库的性能影响较小。,15,程序全局区,程序全局区(PGA)包含单个服务器进程所需的数据和控制信息,PGA是在用户进程连接到数据库并创建一个会话时自动分配的,保存每个与Oracle 数据库连接的用户进程所需的信息,PGA为非共享区,只能单个进程使用,当一个用户会话结束,PGA释放,16,Oracle 实例进程结构,Oracle 实例有几种不同类型的进程,它们是:,实例进程,用户进程,服务器进程,后台进程,用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程,服务器进程用于处理连接到该实例的用户进程的请求。当用户连接至 Oracle 数据库实例创建会话时,即产生服务器进程,后台进程是Oracle数据库为了保持最佳系统性能和协调多个用户请求而设置的。Oracle 实例启动时即创建一系列后台进程,17,后台进程 2-1,后台进程,PMON,实例的各种后台进程是:,SMON,DBWR,LGWR,CKPT,其他,18,后台进程 2-2,PMON 进程监控进程,清理出现故障的进程。释放所有当前挂起的锁定。释放故障进程使用的资源。,SMON 系统监控进程,在实例失败之后,重新打开数据库时自动恢复实例。整理数据文件的自由空间,将相邻区域结合起来。释放不再使用的临时段。,DBWR 数据写入进程,管理数据缓冲区,将最近使用过的块保留在内存中。将修改后的缓冲区数据写入数据文件中。,LGWR 日志写入进程,负责将日志缓冲区中的日志数据写入日志文件。系统有多个日志文件,该进程以循环的方式将数据写入文件。,19,Oracle 物理组件,物理组件就是Oracle数据库所使用的操作系统物理文件。物理文件可分为三类:,物理组件,数据文件,控制文件,日志文件,数据文件用于存储数据库数据,如表、索引数据等。,控制文件是记录数据库物理结构的二进制文件。,日志文件记录对数据库的所有修改信息,用于故障恢复,20,Oracle 逻辑组件 3-1,数据库的逻辑结构是从逻辑的角度分析数据库的组成。Oracle 的逻辑组件包括:,数据库,表空间,段,区,数据块,模式,21,Oracle 逻辑组件 3-2,表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。表空间的大小等于构成该表空间的所有数据文件大小之和。,CREATE TABLESPACE tablespacenameDATAFILE filename SIZE integer K|M AUTOEXTEND OFF|ON;,创建表空间的语法是:,22,Oracle 逻辑组件 3-3,段,段是构成表空间的逻辑存储结构,段由一组区组成。按照段所存储数据的特征,将段分为四种类型,即数据段、索引段、回退段和临时段。,区,区为段分配空间,它由连续的数据块组成。当段中的所有空间已完全使用时,系统自动为该段分配一个新区。区不能跨数据文件存在,只能存在于一个数据文件中。,数据块,数据块是Oracle服务器所能分配、读取或写入的最小存储单元。Oracle服务器以数据块为单位管理数据文件的存储空间。,模式,模式是对用户所创建的数据库对象的总称。模式对象包括表、视图、索引、同义词、序列、过程和程序包等。,23,Oracle 网络配置 2-1,Oracle产品安装完成后,服务器和客户端都需要进行网络配置才能实现网络连接。服务器端配置监听器,客户端配置网络服务名。,24,Oracle 网络配置 2-2,服务器端监听器配置信息包括监听协议、地址及其他相关信息。配置信息保存在名为listener.ora的文件中。在安装服务器软件时自动配置一个监听器客户端的网络服务名配置信息包括服务器地址、监听端口号和数据库SID等,与服务器的监听器建立连接。配置信息保存在名为tnsnames.ora的文件中Oracle中的 Net Configuration Assistant和Net Manager工具都能用来配置监听器和网络服务名,25,Oracle 查询工具,Oracle 查询工具,SQL*Plus,iSQL*Plus,PL/SQL,Oracle 提供的工具非常容易使用。Oracle 的查询工具包括:,SQL*Plus是Oracle最常用的工具之一,用于接受和执行SQL命令以及PL/SQL块。,iSQL*Plus可以执行能用SQL*Plus完成的所有任务。该工具的优势在于能通过浏览器访问它。,PL/SQL 是 SQL 的扩展。PL/SQL 结合了SQL语言的数据操纵能力和过程语言的流程控制能力,26,Oracle 企业管理器,Oracle 企业管理器为管理员提供了图形化的用户界面,并集成了管理数据库的工具,27,Oracle 默认用户,只有用合法的用户帐号才能访问Oracle数据库Oracle 有几个默认的数据库用户,Oracle 默认用户,SYS,SYSTEM,SCOTT,数据库中所有数据字典表和视图都存储在 SYS 模式中。SYS用户主要用来维护系统信息和管理实例。,SYSTEM 是默认的系统管理员,该用户拥有Oracle管理工具使用的内部表和视图。通常通过SYSTEM用户管理数据库用户、权限和存储等,SCOTT用户是Oracle 数据库的一个示范帐户,在数据库安装时创建,28,创建新用户,要连接到Oracle数据库,就需要创建一个用户帐户每个用户都有一个默认表空间和一个临时表空间CREATE USER命令用于创建新用户,CREATE USER usernameIDENTIFIED BY passwordDEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace;,CREATE USER 命令的语法是:,CREATE USER MARTINIDENTIFIED BY martinpwdDEFAULT TABLESPACE USERSTEMPORARY TABLESPACE TEMP;,创建一个名称为 martin 的用户,其密码为 martinpwd,29,授予权限 3-1,权限指的是执行特定命令或访问数据库对象的权利权限有两种类型,系统权限和对象权限系统权限允许用户执行某些数据库操作,如创建表就是一个系统权限对象权限允许用户对数据库对象(如表、视图、序列等)执行特定操作角色是一组相关权限的组合,可以将权限授予角色,再把角色授予用户,以简化权限管理。,30,授予权限 3-2,GRANT 命令可用于为用户分配权限或角色,GRANT CONNECT TO MARTIN;,CONNECT角色允许用户连接至数据库,并创建数据库对象,GRANT RESOURCE TO MARTIN;,RESOURCE角色允许用户使用数据库中的存储空间,GRANT CREATE SEQUENCE TO MARTIN;,此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中,31,授予权限 3-3,授予用户 MARTIN 操作TEST表对象的权限,GRANT SELECT ON TEST TO MARTIN;,允许用户查询 TEST 表的记录,GRANT UPDATE ON TEST TO MARTIN;,允许用户更新 TEST 表中的记录,GRANT ALL ON TEST TO MARTIN;,允许用户插入、删除、更新和查询 TEST 表中的记录,32,更改和删除用户,ALTER USER 命令可用于更改口令,ALTER USER MARTIN IDENTIFIED BY martinpass;,修改 MARTIN 用户的密码,DROP USER 命令用于删除用户,DROP USER MARTIN CASCADE;,删除 MARTIN 用户模式,33,Oracle 9i 的安装和卸载,通过运行Oracle Universal Installer来安装和卸载Oracle数据库,选择 Oracle 9i Database 9.2.0.1.0 来安装数据库服务器。,选择 Oracle 9i Client 9.2.0.1.0 来安装 Oracle 客户端,启动Universal Installer,选择“卸装产品”,选中要卸载的组件,34,使用 Oracle 数据库的开发流程,服务器端,安装 Oracle 服务器软件,创建数据库(安装时自动创建),配置监听器(安装时自动配置),启动Oracle实例(自动启动服务),安装 Oracle 客户端软件,配置网络服务名,以新用户登录 Oracle,提交 SQL 查询,创建新用户并授权,创建用户表空间,客户端,35,Windows 中的 Oracle 服务 3-1,Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理“服务”对话框中的各项 Oracle 服务如图所示:,36,Windows 中的 Oracle 服务 3-2,OracleHOME_NAMETNSListener,该服务启动数据库服务器的监听器,监听器接受来自客户端应用程序的连接请求若监听器未启动,则客户端将无法连接到数据库服务器,OracleServiceSID,该服务启动系统标识符为SID的数据库实例,其中 SID 是在安装 Oracle 9i 时输入的数据库名称,OracleHOME_NAMEAgent,Oracle企业管理器组件智能代理服务,此智能代理用于执行作业和监控 Oracle 服务或对象的性能在使用Oracle管理服务器网络的环境中必须启动此服务,37,Windows 中的 Oracle 服务 3-3,OracleHOME_NAMEHTTPServer,该服务用于启动Oracle HTTP服务器,它提供文档信息、基于Web的企业管理器和iSQL*Plus等服务,OracleHOME_NAMEManagementServer,该服务启动Oracle管理服务器,它用于维护管理控制台对各个被管理服务器节点之间的集中的、智能的和分布式的控制该服务必须经过企业管理器配置向导配置完成后才创建,38,总结,Oracle 服务器由Oracle 数据库和 Oracle 实例组成 Oracle 实例由系统全局区内存结构和用于管理数据库的后台进程组成Oracle 中用于访问数据库的主要查询工具有 SQL*Plus、iSQL*Plus 和 PL/SQLOracle 企业管理器是用于管理、诊断和调整多个数据库的工具Oracle 中的 SYSTEM 用户和 SYS 用户具有管理权限,而 SCOTT 用户只有基本的权限 Oracle 服务在 Windows 注册表中注册,并由 Windows 操作系统管理,第二章,SQL 查询和 SQL 函数,Oracle 服务器由Oracle 数据库和 Oracle 实例组成Oracle 实例由系统全局区内存结构和用于管理数据库的后台进程组成Oracle 中用于访问数据库的主要查询工具有 SQL*Plus、iSQL*Plus 和 PL/SQL Oracle 企业管理器是用于管理、诊断和调整多个数据库的工具Oracle 中的 SYSTEM 用户和 SYS 用户具有管理权限,而 SCOTT 用户只有基本的权限,回顾,41,目标,了解 Oracle 数据类型 了解数据定义语言和数据操纵语言了解事务控制语言和数据控制语言掌握 SQL 操作符和 SQL 函数,42,SQL 简介 2-1,SQL 是 Structured Query Language(结构化查询语言)的首字母缩写词SQL 是数据库语言,Oracle 使用该语言存储和检索信息表是主要的数据库对象,用于存储数据,通过 SQL可以实现与 Oracle 服务器的通信,发送 SQL 查询,用户,43,SQL 简介 2-2,SQL 支持下列类别的命令:数据定义语言(DDL)数据操纵语言(DML)事务控制语言(TCL)数据控制语言(DCL),数据定义语言,CREATE,ALTER,DROP,数据操纵语言,INSERT,SELECT,DELETE,UPDATE,事务控制语言,COMMIT,SAVEPOINT,ROLLBACK,数据控制语言,GRANT,REVOKE,44,Oracle 数据类型 5-1,创建表时,必须为各个列指定数据类型以下是 Oracle 数据类型的类别:,数据类型,字符,数值,日期时间,RAW/LONG RAW,LOB,45,Oracle 数据类型5-2,字符数据类型,CHAR,VARCHAR2,LONG,当需要固定长度的字符串时,使用 CHAR 数据类型。CHAR 数据类型存储字母数字值。CHAR 数据类型的列长度可以是 1 到 2000 个字节。,VARCHAR2数据类型支持可变长度字符串VARCHAR2数据类型存储字母数字值VARCHAR2数据类型的大小在1至4000个字节范围内,LONG 数据类型存储可变长度字符数据LONG 数据类型最多能存储 2GB,46,Oracle 数据类型 5-3,数值数据类型可以存储整数、浮点数和实数最高精度为 38 位数值数据类型的声明语法:NUMBER(p,s)P表示精度,S表示小数点的位数,日期时间数据类型存储日期和时间值,包括年、月、日,小时、分钟、秒主要的日期时间类型有:DATE-存储日期和时间部分,精确到整个的秒TIMESTAMP-存储日期、时间和时区信息,秒值精确到小数点后6位,47,Oracle 数据类型 5-4,RAW 数据类型用于存储二进制数据RAW 数据类型最多能存储 2000 字节LONG RAW 数据类型用于存储可变长度的二进制数据LONG RAW 数据类型最多能存储 2 GB,LOB,LOB 称为“大对象”数据类型,可以存储多达 4GB 的非结构化信息,例如声音剪辑和视频文件等LOB 数据类型允许对数据进行高效、随机、分段的访问,BLOB,CLOB,BFILE,CLOB 即 Character LOB(字符 LOB),它能够存储大量字符数据,BLOB 即 Binary LOB(二进制 LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件,BFILE 即 Binary File(二进制文件),它用于将二进制数据存储在数据库外部的操作系统文件中,48,Oracle 数据类型 5-5,Oracle 中伪列就像一个表列,但是它并没有存储在表中伪列可以从表中查询,但不能插入、更新和删除它们的值常用的伪列有ROWID和ROWNUM,ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行,ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数,49,数据定义语言,数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象用于操纵表结构的数据定义语言命令有:CREATE TABLEALTER TABLETRUNCATE TABLEDROP TABLE,50,数据操纵语言,数据操纵语言用于检索、插入和修改数据数据操纵语言是最常见的SQL命令数据操纵语言命令包括:SELECTINSERTUPDATEDELETE,51,DML SELECT 命令 2-1,利用现有的表创建表语法:CREATE TABLE AS SELECT column_names FROM;,SQL CREATE TABLE newitemfile AS SELECT*FROM itemfile;,SQL CREATE TABLE newitemfile1 AS SELECT itemcode,itemdesc,qty_hand FROM itemfile;,SQL CREATE TABLE newitemfile2 AS SELECT*FROM itemfile WHERE 1=2;,52,DML SELECT 命令 2-2,SQL SELECT DISTINCT vencode FROM vendor_master;,选择无重复的行在SELECT子句,使用DISTINCT关键字,使用列别名为列表达式提供不同的名称该别名指定了列标题,SQL SELECT itemcode,itemdesc,max_level,max_level*2 AS NEW_MAXLEVEL FROM itemfile;,SQL SELECT itemcode,itemdesc,max_level,max_level*2“New Maximum Level”FROM itemfile;,53,DML INSERT 命令 2-1,插入日期类型的值日期数据类型的默认格式为“DD-MON-RR”使用日期的默认格式使用TO_DATE函数转换,INSERT INTO my_table(date_col)VALUES(TO_DATE(2005-10-18,YYYY-MM-DD);,INSERT INTO order_master VALUES(o001,12-5月-05,V002,c,25-5月-05);,54,DML INSERT 命令 2-2,插入来自其它表中的记录语法:INSERT INTO(cloumn_list)SELECT column_names FROM;,SQL INSERT INTO newvendor_master SELECT*FROM vendor_master;,SQL INSERT INTO newvendor_master(vencode,venname)SELECT vencode,venname FROM vendor_master;,55,事务控制语言,事务是最小的工作单元,作为一个整体进行工作保证事务的整体成功或失败,称为事务控制用于事务控制的语句有:COMMIT-提交并结束事务处理ROLLBACK-撤销事务中已完成的工作SAVEPOINT 标记事务中可以回滚的点,SQL UPDATE order_master SET del_date=30-8月-05 WHERE orderno SAVEPOINT mark1;SQL DELETE FROM order_master WHERE orderno=o002;SQL SAVEPOINT mark2;SQL ROLLBACK TO SAVEPOINT mark1;SQL COMMIT;,56,数据控制语言,数据控制语言为用户提供权限控制命令 用于权限控制的命令有:GRANT 授予权限REVOKE 撤销已授予的权限,SQL GRANT SELECT,UPDATE ON order_master TO MARTIN;,SQL GRANT UPDATE(qty_hand,re_level)ON itemfile TO MARTIN;,SQL GRANT SELECT ON vendor_master TO accounts WITH GRANT OPTION;,SQL REVOKE SELECT,UPDATE ON order_master FROM MARTIN;,57,SQL 操作符,SQL 操作符,集合操作符,逻辑操作符,比较操作符,算术操作符,连接操作符,Oracle 支持的 SQL 操作符分类如下:,58,算术操作符,算术操作符用于执行数值计算可以在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、数值常量和连接它们的算术操作符组成算术操作符包括加(+)、减(-)、乘(*)、除(/),SQL SELECT itemdesc,max_level-qty_hand avble_limit FROM itemfile WHERE p_category=spares;,SQL SELECT itemdesc,itemrate*(max_level-qty_hand)FROM itemfile WHERE p_category=spares;,59,比较操作符,比较操作符用于比较两个表达式的值比较操作符包括=、!=、=、BETWEENAND、IN、LIKE 和 IS NULL等,SQL SELECT itemdesc,re_level FROM itemfile WHERE qty_hand max_level/2;,SQL SELECT orderno FROM order_master WHERE del_date IN(06-1月-05,05-2月-05);,SQL SELECT vencode,venname,tel_no FROM vendor_master WHERE venname LIKE j_s;,60,逻辑操作符,SQL SELECT*FROM order_master WHERE odate 10-5月-05 AND del_date 26-5月-05;,显示 2005-5月-10 至 2005-5月-26的订单信息,逻辑操作符用于组合多个计较运算的结果以生成一个或真或假的结果。逻辑操作符包括与(AND)、或(OR)和非(NOT)。,61,集合操作符,集合操作符将两个查询的结果组合成一个结果,集合操作符,UNION,UNION ALL,INTERSECT,MINUS,INTERSECT 操作符只返回两个查询的公共行。,SQL SELECT orderno FROM order_master INTERSECT SELECT orderno FROM order_detail;,SQL SELECT orderno FROM order_master MINUS SELECT orderno FROM order_detail;,MINUS 操作符返回从第一个查询结果中排除第二个查询中出现的行。,62,连接操作符,连接操作符用于将多个字符串或数据值合并成一个字符串,SQL SELECT(venname|的地址是|venadd1|venadd2|venadd3)address FROM vendor_master WHERE vencode=V001;,通过使用连接操作符可以将表中的多个列合并成逻辑上的一行列,63,操作符的优先级,SQL 操作符的优先级从高到低的顺序是:算术操作符-最高优先级连接操作符比较操作符NOT 逻辑操作符AND 逻辑操作符OR 逻辑操作符-最低优先级,64,SQL 函数,Oracle 提供一系列用于执行特定操作的函数SQL 函数带有一个或多个参数并返回一个值以下是SQL函数的分类:,SQL 函数,单行函数,分析函数,分组函数,65,单行函数分类,单行函数对于从表中查询的每一行只返回一个值可以出现在 SELECT 子句中和 WHERE 子句中 单行函数可以大致划分为:日期函数数字函数字符函数转换函数其他函数,66,日期函数,日期函数对日期值进行运算,并生成日期数据类型或数值类型的结果日期函数包括:ADD_MONTHSMONTHS_BETWEENLAST_DAYROUNDNEXT_DAYTRUNCEXTRACT,67,字符函数 2-1,字符函数,字符函数接受字符输入并返回字符或数值,68,字符函数 2-2,SQL SELECT CHR(67)FROM dual;,以下是一些其它的字符函数:CHR和ASCIILPAD和RPADTRIMLENGTHDECODE,SQL SELECT LPAD(function,15,=)FROM dual;,SQL SELECT TRIM(9 from 9999876789999)FROM dual;,SQL SELECT LENGTH(frances)FROM dual;,SQL SELECT vencode,DECODE(venname,frances,Francis)name FROM vendor_master WHERE vencode=v001;,69,数字函数,数字函数接受数字输入并返回数值结果,数字函数,70,转换函数,转换函数将值从一种数据类型转换为另一种数据类型常用的转换函数有:TO_CHARTO_DATETO_NUMBER,SELECT TO_CHAR(sysdate,YYYY年fmMM月fmDD日 HH24:MI:SS)FROM dual;,SELECT TO_CHAR(itemrate,C99999)FROM itemfile;,SELECT TO_DATE(2005-12-06,yyyy-mm-dd)FROM dual;,SELECT TO_NUMBER(100)FROM dual;,71,其它函数,以下是几个用来转换空值的函数:NVLNVL2NULLIF,SELECT itemdesc,NVL(re_level,0)FROM itemfile;,SELECT itemdesc,NVL2(re_level,re_level,max_level)FROM itemfile;,SELECT itemdesc,NULLIF(re_level,max_level)FROM itemfile;,72,分组函数,分组函数基于一组行来返回结果为每一组行返回一个值,AVG,MIN,MAX,SUM,COUNT,SELECT AVG(re_level)FROM itemfile WHERE p_category=accessories;,SELECT MAX(max_level)FROM itemfile;,SELECT SUM(itemrate*max_level)FROM itemfile;,SELECT COUNT(*)FROM itemfile;,SELECT COUNT(itemrate)FROM itemfile;,SELECT COUNT(DISTINCT qty_hand)FROM itemfile;,分组函数,73,GROUP BY和HAVING子句,GROUP BY子句用于将信息划分为更小的组每一组行返回针对该组的单个结果HAVING子句用于指定 GROUP BY 子句检索行的条件,SELECT p_category,MAX(itemrate)FROM itemfile GROUP BY p_category;,SELECT p_category,MAX(itemrate)FROM itemfileGROUP BY p_categoryHAVING p_category NOT IN(accessories);,74,分析函数 2-1,分析函数根据一组行来计算聚合值用于计算完成聚集的累计排名、移动平均数等分析函数为每组记录返回多个行,分析函数,DENSE_RANK,RANK,ROW_NUMBER,75,分析函数 2-2,以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始ROW_NUMBER 返回连续的排位,不论值是否相等RANK 具有相等值的行排位相同,序数随后跳跃DENSE_RANK 具有相等值的行排位相同,序号是连续的,SELECT ename,job,deptno,sal,ROW_NUMBER()OVER(ORDER BY sal DESC)AS SAL_RANK FROM SCOTT.EMP;,SELECT deptno,ename,sal,comm,RANK()OVER(PARTITION BY deptno ORDER BY sal DESC,comm)RANKFROM emp;,SELECT d.dname,e.ename,e.sal,DENSE_RANK()OVER(PARTITION BY e.deptno ORDER BY e.sal DESC)AS DENRANKFROM emp e,dept d WHERE e.deptno=d.deptno;,76,总结,SQL 是通用的数据库语言SQL 命令可分为数据定义语言、数据操纵语言、事务控制语言和数据控制语言Oracle 支持的数据类型包括字符、数值、日期时间、RAW 和 LOB 等SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符SQL 函数可大致分为单行函数、聚合函数和分析函数,第三章,锁和表分区,78,回顾,SQL 是数据库语言,Oracle 使用该语言在数据库中存储和检索信息Oracle 支持各种数据类型,如 VARCHAR2、NUMBER、LONG、RAW 和 DATE 等数据操纵语言用于查询和修改表中的数据事务控制语言管理事务的一致性SQL 操作符包括算术、比较、逻辑、集合和连接操作符SQL 函数可以大致分为单行函数、聚合函数和分析函数,79,目标,理解锁定的概念了解和使用表分区,80,锁的概念 2-1,锁是数据库用来控制共享资源并发访问的机制。锁用于保护正在被修改的数据直到提交或回滚了事务之后,其他用户才可以更新数据,81,锁的概念 2-2,修改表,修改表,拒绝访问,82,锁定的优点,一致性-一次只允许一个用户修改数据完整性-为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户,并行性 允许多个用户访问同一数据,修改表中的数据,查看表中的数据,允许访问,83,表级锁,行级锁,锁的类型,锁的类型,84,行级锁 3-1,更新 T002 行,更新 T001 行,行被锁定,对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行,允许访问,85,行级锁 3-2,行级锁是一种排他锁,防止其他事务修改此行在使用以下语句时,Oracle会自动应用行级锁:INSERTUPDATEDELETESELECT FOR UPDATESELECT FOR UPDATE语句允许用户一次锁定多条记录进行更新使用COMMIT或ROLLBACK语句释放锁,86,行级锁 3-3,SELECT FOR UPDATE语法:SELECT FOR UPDATE OF columnsWAIT n|NOWAIT;,SQL SELECT*FROM order_master WHERE vencode=V002 FOR UPDATE OF odate,del_date;SQL UPDATE order_master SET del_date=28-8月-05 WHERE vencode=V002;SQL COMMIT;,SQL SELECT*FROM order_master WHERE vencode=V002 FOR UPDATE WAIT 5;,SQL SELECT*FROM order_master WHERE vencode=V002 FOR UPDATE NOWAIT;,87,表级锁 3-1,修改表中的行,更新表,拒绝访问,锁定整个表,限制其他用户对表的访问。,88,表级锁 3-2,表级锁类型,行共享,行排他,共享,使用命令显示地锁定表,应用表级锁的语法是:LOCK TABLE table_name IN mode MODE;,共享行排他,排他,89,表级锁 3-3,行共享(ROW SHARE)禁止排他锁定表行排他(ROW EXCLUSIVE)禁止使用排他锁和共享锁共享锁(SHARE)锁定表,仅允许其他用户查询表中的行禁止其他用户插入、更新和删除行多个用户可以同时在同一个表上应用此锁共享行排他(SHARE ROW EXCLUSIVE)比共享锁更多的限制,禁止使用共享锁及更高的锁排他(EXCLUSIVE)限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表,90,死锁,当两个事务相互等待对方释放资源时,就会形成死锁Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁右边是一个死