有关Oracle学习总结

时间:2024.3.31

表xyz

a b c

1 m hj

1 m hjk

1 n jk

2 u we

2 u wert

3 q s

4 a ds

4 a dsaa

怎么删掉第1、5、8条记录?(字段a、b相同的几条记录只留一条,留下字段C较短的一条)

DELETE FROM LIANXI

WHERE LENGTH(C) NOT IN (SELECT MIN(LENGTH(C)) FROM LIANXI GROUP BY A, B)

oracle数据库常用的命令集锦

今日开始研究oracle,搜索到了一个好东东,拿出来与大家一同分享。

下面是摘抄的部分 :[local]2[/local]

ORACLE相关语法及命令

一、Oracle入门

理论知识:

Oracle的物理组件有三个:

(1)数据文件 数据文件是用于存储数据库数据的文件,如表、索引数据。每个Oracle数据库有一个或多个物理数据文件, 一个数据文件只能与一个数据库关联。

(2)日志文件 用于记录对数据库进行的修改信息,日志文件主要用于在数据库出现故障时实施数据库恢复。

(3)控制文件 控制文件是记录数据库物理结构的二进制文件,每个Oracle数据库都含有一个控制文件。

Oracle的逻辑组件:

表空间(TableSpace) 表空间是数据库最大的逻辑单位,一个数据库至少包含一个表空间,一个表空间包含一个或多个段等等。

段(Segment) 段存在于表空间中,分成4类,数据段、索引段、回退段、临时段。 区(Extent) 区是磁盘空间分配最小单位,由连续的数据块组成,一个或多个区构成段,区只能存在于一个数据文件中。

数据块(Data Block) 数据块是数据库中最小的数据组织单位与管理单位,Oracle数据库中的数据存储于数据块中,取值范围2K-64K之间。

模式(schema) 模式是对用户所创建的数据库对象的总称,又称为用户模式。

概念:

内存 Oracle内存结构包含以下两个内存区。

1、系统全局区(SGA) 实例启动时分配该内存区,是Oracle实例的一个基本组件。 又称为共享全局区,它用来存储数据库信息,并由多个数据库进程共享。可分为共享池、数据缓冲区及日志缓冲区。

(1)共享池 是对SQL、PL\SQL程序进行语法分析、编译、执行的内存区域。共享池由库缓存和数据字典缓存组成。其中,库缓存含有最近执行的SQL、PL\SQL语句的分析码和执行计划;数据字典缓存含有从数据字典中得到的表、索引、列定义和权限等信息。

(2)数据缓冲区 数据缓冲区用于存储从磁盘数据文件中读入的数据,所有用户共享。

(3)日志缓冲区 日志记录数据库的所有修改信息,主要用于恢复数据。

2、程序全局区(PGA) 服务器进程启动时分配该内存区。PGA为非共享区,只能单个进程使用,当一个用户会话结束后,PGA释放。

用户进程(PGA)发送SQL语句到共享全局区(SGA),先在共享池的库缓存中查询是否存在所需的数据块,如果存在就在数据字典中读取相应的数据块,如果不存在就由服务器进程(DBWR)来IO数据库

语法知识:

创建表空间的语法如下:

CREATE TABLESPACE tablespacename DATAFILE 'd:\filename.DBF' [SIZE int [KB|MB]]

[AUTOEXTEND [OFF|ON]];

tablespacename 是需创建的表空间名称。

DATAFILE 指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号分隔。 filename 是表空间中数据文件的路径和名称。

SIZE 指定文件的大小,用K指定千字节大小,用M指定兆字节大小。

AUTOEXTEND子句用来启用或禁用数据文件的自动扩展。

Oracle默认用户:

用户名:sys 默认密码:chage_on_install 用来管理拥有Oracle数据字典文件 用户名:system 默认密码:manager 用来管理拥有数据字典视图对象 用户名:scott 默认密码:tiger 示例用户,包括emp、dept等表

连接Oracle: 在控制台下输入 sqlplus 用户名/密码 回车或 sqlplusw 回车

相关命令:

disconn //退出当前登录

conn 用户名/密码 //连接Oracle

alter user 用户名 identified by 密码 //修改用户口令

drop user 用户名 cascade; //删除用户

alter user 用户名 account lock; //给某个用户加锁

alter user 用户名 account unlock; //给某个用户解锁

ed 回车: //打开缓冲区

/ 回车: //执行缓冲区中的语句

create user 用户名 identified by 密码 [password expire]

[default tablespace 表空间名] [temporary tablespace 临时表空间名]; //创建用户

相关权限:

grant connect to scott; //connect角色将允许用户创建数据库并在数据库中创建表或其他对象

grant resource to scott; //resource角色将允许用户使用数据库中的空间

grant create sequence to scott; //create sequence权限将允许用户创建序列,此权限包含在connect连接角色中

grant select on emp to scott; //将emp表的查询权限授予用户scott

grant update(vencode,venname) on 表名 to scott; //将特定列的更新权限授予用户scott grant 权限 on 表名 to 用户名 with grant option; //接受该权限的用户可以将此权限授予其他用户

revoke select,update on 表名 from 用户名; //收回相应的权限

二、SQL查询和SQL函数

SQL支持如下类别的命令:

数据定义语言: create(创建)、alter(更改)、drop(删除)和truncate(截断)命令。 数据操纵语言: insert(插入)、select(选择)、delete(删除)和update(更新)命令。 事务控制语言: commit(提交)、savepoint(保存点)和rollback(回滚)命令。 数据控制语言: grant(授予)和revoke(回收)命令。

数据类型:

char: 长度在1到2000个字节,声明多少字节在内存中就占用多少字节,输入的值小于指定的长度时用空格填充。

varchar2: 长度在1到4000个字节,输入的值是多少字节,就占用多少字节。

long: 长度在2GB,设置为此类型的列时,要注意:一个表中只有一列可以为long类型,long类型列不能定义为唯一约束或主键约束,不能建立索引,过程或存储过程不能接受long类型的参数。

number(p,s): 其中p为精度,表示数字的总位数,在1至38之间。s为范围,表示小数点右边数字的位数,在-84至127之间。

date: 日期类型,sysdate为当前系统时间。格式为08-9月 -07。

timestamp: 用于存储日期的年、月、日以及时间的时、分和秒。其中秒精确到小数点后6位,

systimestamp返回当前日期、时间。格式为08-9月 -07 04.08.30.000000 下午。

raw: 此数据类型用于存储基于字节的数据,如二进制数据或字节串,该类型最多能存储2000个字节,可以建立索引。

long raw: 此数据类型用于可变长度的二进制数据,最多能存储2GB。long数据类型的所有限制对long raw数据类型也同样有效。

lob又称为"大对象"数据类型,最多能存储4GB的非结构化信息。包括:

clob: clob代表Character LOB(字符LOB),它能存储大量字符数据。如XML文档。 blob: blob代表Binary LOB(二进制LOB),它能存储较大的二进制对象,如图形、视频剪辑和声音剪辑。

bfile: bfile代表Binary File(二进制文件),它能够将二进制文件存储在数据库外部的操作系统文件中。

伪列:

rowid: select rowid,ename, from scott.emp where empno='7900';

rownum: select * from scott.emp where rownum<11; //限制查询返回的行数

语法知识:

desc 表名; //查看表结构

alter table 表名 modify (列名 varchar2(25)); //修改列

alter table 表名 add (列名 varchar2(12),列名 number(12)); //添加列

alter table 表名 drop column 列名; //删除列

truncate table 表名; //中删除记录而不删除结构,不使用事务处理,因此无法回滚 drop table 表名; //删除表及其全部数据

create table 新表名 as select * from 表名 where 1=2; //用现有的表创建一个新表 select deptno*2 "New No",dname,loc from dept; //指定一个含有特殊字符(如空格)的列标题

commit; //提交事务

savepoint 标记名; //标记事务点

rollback; //回滚整个事务处理

rollback to [savepoint] 标记名;//回滚到事务中某个特定的保存点

集合操作符:

union(联合): 此操作符返回两个查询选定的所有不重复的行。

语法 select orderno from order_master UNION select orderno from order_detail;

union all(联合所有): 此操作符合并两个查询选定的所有行,包括重复的行。

语法:select orderno,ename from order_master UNION ALL select orderno,proname from order_detail order by 2;

注意:在两个select语句中指定的列名不必相同,但数据类型必须匹配。也可以对联合查询的结果进行排序,使用Order By子句时,它必须放在最后

一个select语句之后,而且必须指定列索引来排序,而不是指定列名,列索引是从1开始的整数。上述语法便是以proname的索引排序

intersect(交集): 此操作符只返回两个查询都有的行。

语法:select orderno from order_master INTERSECT select orderno from order_detail;

minus(减集): 此操作符中返回由第一个查询选定但是第二个查询中没有选定的行,也就是在第一个查询结果中排除第二个查询结果中出现的行。

语法:select orderno from order_master MINUS select orderno from order_detail;查询尚未交付的订单

连接( || )操作符:

语法: select ('供应商'||venname||'的地址是'||venadd1||' '||venadd2||' '||venadd3) 地址 from vendor_master where vencode='V002'; 将多个字符串合并为一个字符串。

SQL函数:

1、日期函数:

add_months: 此函数返回给指定的日期加上指定的月数后的日期值。语法为add_months(d,n),其中d是日期,n表示月数。

示例:select add_months(sysdate,2) from dual; 将当前时间加上2个月后的日期值。 months_between: 此函数返回两个日期之间的月数。语法为months_between(d1,d2),其中d1和d2是日期,如果d1大于d2,则结果为正数;否则为负数。

last_day: 此函数返回指定日期当月的最后一天的日期值,语法为last_day(d),其中d表示日期。

示例:select last_day(sysdate) from dual; 返回当前日期的月的最后一天,如果是9月就返回30-09月-07

round: 此函数返回日期值,将日期四舍五入为格式模型指定的单位。语法为round(d,[fmt])。其中d是日期,fmt是格式模型。fmt是一个可选项,日期默认舍入为最靠近的那一天。如果指定格式为年"Year",则舍入到年的开始,即1月1日;如果格式为月"Month",则舍入到月的第一日;如果格式为周"Day",则舍入到最靠近的星期日。

示例:select round(sysdate,'month') from dual; 返回最接近的一个月。

next_day: 此函数返回指定的下一个星期几的日期。语法为next_day(d,day)。其中d表示日期,而day指周内任何一天。

示例:select next_day(sysdate,'星期日') from dual; 返回下一个星期日的日期,也可以用1表示,以此类推,星期一以2表示。

trunc: 此函数将指定日期截断为由格式模型指定的单位日期,与Round函数不同的是它只舍不入,语法为trunc(d,[fmt]),与round格式相同。

示例:select trunc(sysdate,'year') from dual; 返回当前年的第一天,也就是1月1日。 示例:select trunc(sysdate,'day') from dual; 返回紧靠前面的星期日。如果为"20xx年1月27日"就会返回"20xx年1月23日"。

extract: 此函数提取日期时间类型中的特定部分。语法为extract(fmt from d),其中d是日期时间表达式,fmt是要提取的部分的格式。格式的取值可以是year,month,day,hour,minute,second,注意此处的格式不使用单引号。

示例:select extract(year from sysdate) from dual; 返回当前的年份。

2、字符函数:

initcap(char): 首字母大写,示例:select initcap('hello') from dual; 输出结果:Hello。 lower(char): 转换为小写,示例:select lower('FUN') from dual; 输出结果:fun。 upper(char): 转换为大写,示例:select upper('sun') from dual; 输出结果:SUN。

ltrim(char,set): 左剪裁,示例:select ltrim('xyzadams','xyz') from dual; 输出结果:adams。 rtrim(char,set): 右剪裁,示例:select rtrim('xyzadams','ams') from dual; 输出结果:xyzad。 translate(char,from,to): 按字符翻译,示例:select translate('jack','abcd','1234') from dual; 输出结果:j13k。

replace(char,search_str,replace_str): 字符串替换,示例:select replace('jack and jue','j','bl') from dual; 输出结果:black and blue。

instr(char,substr[,pos1,pos2]): 查找子字串位置。

示例:select instr('vorldwide','d') from dual; 输出结果:5。pos1为可选,表示从第几个位置查找。pos2为可选,表示从第几次出现的位置找。

substr(char,pos,len): 取子字符串,示例:select substr('abcdefg',3,2) from dual; 输出结果:cd。 concat(char1,char2): 连接字符串,示例:select concat('Hello','world') from dual; 输出结果:Helloworld。

chr: 此函数根据Ascii码返回对应的字符,示例:select chr(45788),chr(53671),chr(50167),chr(65) from dual; 输出结果:曹 学 明 A。

ascii: 此函数返回GBK编码值,示例:select ascii('曹') cao ,ascii('学') xue,ascii('明') Ming from dual; 输出结果:45788 53671 50167。

lpad和rpad: 示例:select lpad('function',15,'=') from dual; 输出结果:=======function。而rpad则相反,字符串填充在右边。

trim: 此函数从字符串的开头或结尾(或开头和结尾)剪裁特定的字符,默认剪裁空格。如果加上leading选项时与ltrim函数相似。指定trailing时和 rtrim函数相似。 示例: select trim(9 from 999992598899) from dual; 输出结果:25988。

示例: select trim(leading 9 from 999992598899) from dual; 输出结果:2598899。 示例: select trim(trailing 9 from 999992598899) from dual; 输出结果:9999925988。

length: 此函数返回字符串的长度,示例:select length('frances') from dual; 输出结果:7。 decode: 示例:select deptno,dname,decode(loc,'NEW YORK','纽约','BOSTON','波士顿') from scott.dept;

此示例将替换显示loc列的结果,结果为"NEW YORK"的替换为"纽约","BOSTON"的替换为"波士顿"。

GREATEST/least: 返回一组表达式中的最大值/最小值,即比较字符的编码大小. 示例:select greatest('AA','AB','AC') from dual; 输出结果:AC。

select least('AA','AB','AC') from dual; 输出结果:AA。

select greatest('啊','安','天') from dual; 输出结果:天。

select least('啊','安','天') from dual; 输出结果:啊。

3、数字函数:

abs(n): 取绝对值,示例:select abs(-15) from dual; 输出结果:15。

ceil(n): 向上取整,示例:select ceil(44.778) from dual; 输出结果:45。

sign(n): 取符号,示例:select sign(-2) from dual; 输出结果:-1。

floor(n): 向下取整,示例:select floor(200.88) from dual; 输出结果:200。

power(m,n): m的n次幂,示例:select power(5,3) from dual; 输出结果:125。

mod(m,n): 取余数,示例:select mod(10,3) from dual; 输出结果:1。

round(m,n): 四舍五入,示例:select round(100.256,2) from dual; 输出结果:100.26。 trunc(m,n): 截断,示例:select trunc(100.256,2) from dual; 输出结果:100.25。

sqrt(n): 平方根,示例:select sqrt(4) from dual; 输出结果:2。

4、转换函数:

to_char(d|n[,fmt]): 其中d是日期,n是数字,fmt指定日期或数字的格式。

示例:select to_char(sysdate,'yyyy"年"fmmm"月"fmdd"日" hh24:mi:ss') from dual; 输出结果:20xx年9月09日 20:44:27。

select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24"时"mi"分"ss"秒"') from dual; 示例:select to_char(sal,'$99999') from emp; 输出结果:$1600。

to_date(char[,fmt]): 此函数将char或varchar2数据类型转换为日期数据类型。 示例:select to_date('2005-12-06','yyyy-mm-dd') from dual; 输出结果:06-12月-05。 select to_date('2008/08/10 20:08:08','yyyy/mm/dd hh24:mi:ss') from dual;

select to_date('2008-08-10 20:08:08','yyyy/mm/dd hh24:mi:ss') from dual;

select to_date('20xx年08月10日 20时08分08秒','yyyy"年"mm"月"dd"日" hh24"时"mi"分"ss"秒"') from dual;

to_number(char): 此函数将包含数字的字符串转换为number数据类型,通常不用这么做,因为Oracle可以对数字字符串进行隐式转换。

示例:select sqrt(to_number('100')) from dual; 输出结果:10。

5、其它函数:

nvl(expression1,expression2): 如果expression1为NULL,则nvl返回expression2。

nvl2(expression1,expression2,expression3): 如果expression1不是NULL,则nvl2返回expression2,如果expression1是NULL,则返回expression3。

nullif(expr1,expr2): 此函数比较两个表达式,如果它们相等,则返回空值,否则返回expr1。 nullif函数等价于以下的case表达式:

case when expr1=expr2 then null else expr1 end

6、分组函数:

avg: 此函数返回指定列值的平均值,示例:select avg(sal) from emp; 输出结果:2073.21429。

min: 此函数返回指定列值的最小值,示例:select min(sal) from emp; 输出结果:800。 max: 此函数返回指定列值的最大值,示例:select max(sal) from emp; 输出结果:5000。 sum: 此函数返回指定列值的总和,示例:select sum(sal) from emp; 输出结果:29025。 count: 此函数是为了计算行数,它可以接受3种不同的参数

示例:select count(*) from emp; 输出结果:14。

示例:select count(列名) from 表名;

示例:select count(distinct 列名) from 表名;

group by: 此子句用于将信息表划分为组,按组进行聚合运算。select后面跟的列名只能是分组函数、group by子句中出现的列或表达式。

示例:select deptno,max(sal) from emp group by(deptno); 查出每个部门的最高工资。 示例:select deptno,count(*),sum(sal) from scott.emp group by deptno; //group by主要用来对一组数进行统计

having: 此子句用来指定group by子句的检索条件。

示例:select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5; //having对分组统计再加限制条件

7、分析函数:只能出现在select列表或order by子句中。

row_number: 下面对所有员工的工资进行排名,即使工资相同,其排名也不能相同。 示例:select ename,job,deptno,sal,row_number() over(order by sal desc) as 排名 from scott.emp;

下面对所有员工的工资按部门进行排名,即使工资相同,排名也不同。

示例:select ename,job,deptno,sal,row_number() over(partition by deptno order by sal desc) as 排名 from scott.emp;

rank: 此函数计算一个值在一组值中的排位,排位是以1开头的连续整数,如果两行的序数为1,则没有序数2,下行的序数为3。

下面根据员工的工资和佣金对员工在每个部门中进行排位。相同的工资排位相同,并且排位不连续。

示例:select ename,sal,comm,deptno,rank() over(partition by deptno order by sal desc,comm) 排名 from scott.emp;

dense_rank: 此函数计算一个行在一组有序行中的排位,排位是以1开头的连续整数,具有相同值的排位相同,并且排位是连续的。

下面首先选择所有在accounting或research部门中工作的员工的部门名称、员工姓名和工资,

然后分别计算每个员工的工资在部门中的排位,相等的工次排位相同

示例:select d.dname,e.ename,e.sal,dense_rank() over(partition by e.deptno order by e.sal desc) 排名

from emp e,dept d where e.deptno=d.deptno;

三、锁和表分区

锁定是数据库用来控制共享资源并发访问的机制。

Oracle提供以确保在多用户环境下数据的完整性和一致性。

锁的两种级别:(只有在提交或回滚后才能释放锁定)

(1)行级锁:是一种排他锁,防止其他事务修改此行,但是不会阻止读取此行的操作。在使用Insert、Update、Delete和Select...For Update

等语句时,Oracle会自动应用行级锁定。

Select...For Update语法为:

Select...For Update [OF column_list] [WAIT n | NOWAIT]

其中:OF子句用于指定即将更新的列,即锁定行上的特定列。

WAIT子句指定等待其他用户释放锁的秒数,防止无限期的等待。NOWAIT为不等待。 示例1:演示如何锁定deptno值为10的所有行。

select * from dept where deptno=10 for update of dname,loc;

(2)表级锁:将保护表数据,在事务处理过程中,表级锁会限制对整个表的访问。表级锁用来限制对表执行添加、更新和删除等修改操作。

语法:

LOCK TABLE <table_name> IN <lock_mode> MODE [NOWAIT];

其中:table_name是要被锁定的表的名称。

lock_mode是锁定的模式。

表级锁的模式:

1、行共享(ROW SHARE,RS): 允许其他用户访问和锁定该表,但是禁止排他锁锁定整个表。

2、行排他(ROW EXCLUSIVE,RX):与行共享模式相同,同时禁止其他用户在此表上使用共享锁。使用Select...For update语句会自动应用行排他。

3、共享(SHARE,S):共享锁将锁定表,仅允许其他用户查询表中的行,但不允许插入、更新或删除行。多个用户可以同时在同一张表中放置共享锁

即允许资源共享。但是这样极容易造成死锁。

4、共享行排他(SHARE ROW EXCLUSIVE,SRX): 执行比共享表锁更多的限制。防止其他事务在表上应用共享锁、共享行排他锁以及排他锁。

5、排他(EXCLUSIVE,X): 对表执行最大限制。除了允许其他用户查询该表的记录,排他锁防止其他事务对表做任何更改或在表上应用任何类型的锁。

示例2:演示如何以共享模式锁定表。

lock table dept in share mode nowait;

表分区的优点:

改善表的查询性能;表更容易管理;便于备份和恢复;提高数据安全性。

注意:要分区的表不能具有Long和Long Raw数据类型的列。

四种分区方法:

1、范围分区:根据表的某个列或一组列的值范围,决定将该数据存储在哪个分区上。 语法如下:

在Create Table语句后增加

PARTITION BY RANGE(column_name)

(

PARTITION part1 VALUE LESS THAN (range1) [TABLESPACE tbs1],

PARTITION part2 VALUE LESS THAN (range2) [TABLESPACE tbs2],

....

PARTITION partN VALUE LESS THAN (MAXVALUE) [TABLESPACE tbsN] );

其中:column_name是以其为基础创建范围分区的列,特定行的该列值称为分区键。 part1...partN是分区的名称。

range1...MAXVALUE是分区的边界值。

tbs1...tbsN是分区所在的表空间,TABLESPACE子句是可选项。

示例3:

create table t_emp

(

empno number(4),

ename varchar2(30),

sal number

)

partition by range(empno)

(

partition e1 values less than (1000) tablespace emp1, 也可以 than (to_date('2003-01-01','yyyy-mm-dd'))

partition e2 values less than (2000) tablespace emp2, 也可以 than (to_date('2004-01-01','yyyy-mm-dd'))

partition e3 values less than (maxvalue) tablespace emp3

);

2、散列分区:语法有两种如下

PARTITION BY HASH(column_name)

PARTITIONS number_of_partitions [STORE IN (tablespace_list)];

PARTITION BY HASH(column_name)

(

PARTITION part1 [TABLESPACE tbs1],

PARTITION part2 [TABLESPACE tbs2],

...

PARTITION partN [TABLESPACE tbsN]

);

其中:column_name是以其为基础创建散列分区的列。

number_of_partitions是散列分区的数目,使用这种方法系统会自动生成分区的名称。 tablespace_list指定分区使用的表空间,如果分区数目比表空间的数目多,分区将会以循环的方式分配到表空间中。

part1...partN是分区的名称。

tbs1...tbsN是分区所在的表空间,TABLESPACE子句是可选项。

示例4:自动分配4个散列分区,

可以使用select partition_name,HIGH_VALUE from user_tab_partitions where table_name=upper('t_emp')查询分区名

create table t_emp

(

empno number(4),

ename varchar2(30),

sal number

)

partition by hash (empno)

partitions 4;

3、复合分区:是范围分区和散列分区的结合。在创建复合分区时,先根据范围对数据进

行分区,然后在这些分区内创建散列子分区。

语法如下:

PARTITION BY RANGE(column_name1)

SUBPARTITION BY HASH(column_name2)

SUBPARTITIONS number_of_partitions [STORE IN (tablespace_list)]

(

PARTITION part1 VALUE LESS THAN (range1) [TABLESPACE tbs1],

PARTITION part2 VALUE LESS THAN (range2) [TABLESPACE tbs2],

....

PARTITION partN VALUE LESS THAN (MAXVALUE) [TABLESPACE tbsN] );

其中:column_name1是以其为基础创建范围分区的列。

column_name2是以其为基础创建散列分区的列。

number_of_partitions是要创建的子分区的数目。

part1...partN是分区的名称。

range1...MAXVALUE是范围分区的边界值

示例5:将雇员表先按照雇佣时间hiredate进行了范围分区,然后再把每个分区分为2个子hash分区,此表一共是6个分区。

create table t_emp

(

empno number(4),

ename varchar2(30),

hiredate date

)

partition by range (hiredate)

subpartition by hash (empno)

subpartitions 2

(

partition e1 values less than (to_date('20020501','YYYYMMDD')),

partition e2 values less than (to_date('20021001','YYYYMMDD')),

partition e3 values less than (maxvalue)

);

4、列表分区:此分区允许用户明确地控制行到分区的映射。

语法如下:

PARTITION BY LIST(column_name)

(

PARTITION part1 VALUES (values_list1),

PARTITION part2 VALUES (values_list2),

....

PARTITION partN VALUES (DEFAULT)

);

其中:column_name是以其为基础创建列表分区的列。

part1...partN是分区的名称。

values_list是对应分区的分区键值的列表。

DEFAULT关键字允许存储前面的分区不能存储的记录。

示例6:

create table t_emp1

(

empno number(4),

ename varchar2(30),

location varchar2(30)

)

partition by list (location)

(

partition e1 values ('北京'),

partition e2 values ('上海','天津','重庆'),

partition e3 values ('广东','福建'),

);

要查询表分区中的数据行:select * from table_name PARTITION(p1); 注:p1是分区名。 分区维护操作:

1、添加分区:ALTER...ADD PARTITION语句用于在现有的最后一个分区之后添加新的分区。

示例7:演示如何将名为E4的新分区添加到示例3中创建的t_emp表。

ALTER TABLE t_emp ADD PARTITION E4 VALUES LESS THAN (3000);

在此请注意:上例公适用于已使用特定的键值定义了最后一个分区的表。如果要在表的开始或中间位置添加分区,或者最高分区的分区

边界是MAXVALUE,则应使用SPLIT PARTITION语句。

2、删除分区:使用ALTER TABLE...DROP PARTITION语句。

示例8:演示了如何删除t_emp表的E4分区。删除分区时,分区中的数据也随之删除。 ALTER TABLE t_emp DROP PARTITION E4;

3、截断分区:使用ALTER TABLE...TRUNCATE PARTITION语句来截断分区,只删除表分区中的所有记录。

示例9:演示了如何删除t_emp表中e3的分区的所有记录。

ALTER TABLE t_emp TRUNCATE PARTITION e3;

4、合并分区:可以将范围分区或复合分区表的两个相邻分区连接起来。结果分区将继承被合并的两个分区的较高上界。

语法如下:

ALTER TABLE table_name MERGE PARTITIONS partitions_name,partitions_name INTO PARTITION partition_name;

示例10:演示了如何将e1和e2合并成一个e2分区。

ALTER TABLE t_emp MERGE PARTITIONS e1,e2 INTO PARTITION e2;

5、拆分分区:使用SPLIT PARTITION语句在表的开头或中间添加分区。拆分分区允许用户将一个分区拆分为两个分区。

语法如下:

ALTER TABLE table_name SPLIY PARTITION partition_name AT (value) INTO (PARTITION partition1,PARTITION partition2);

示例11:演示了如何将t_emp表中的e3分区拆分为e31和e32两个分区。

ALTER TABLE t_emp SPLIT PARTITION e3 AT (Date '2005-01-01') INTO (PARTITION e31,PARTITION e32);

6、重新命名拆分后的分区:

ALTER TABLE t_emp RENAME PARTITION e31 TO P3;

ALTER TABLE t_emp RENAME PARTITION e32 TO P4;

可以查询字典视图user_tab_partitions来查看用户所创建的分区的详细信息

示例12:select table_name,partition_name,high_value from user_tab_partitions;

可以查询字典视图dba_tab_subpartitions来查看用户所创建的子分区的详细信息

示例13:select table_name,partition_name,subpartition_name from dba_tab_subpartitions;

四、数据库对象

表、视图、序列、过程、函数、程序包,甚至其它同义词都可以创建同义词。

1、同义词:私有同义词、公有同义词。

私有同义词只能被当前模式的用户访问。私有同义词名称不可与当前模式的对象名称相同。要在自身的模式创建私有同义词,

用户必须拥有Create Synonym系统权限。要在其它用户模式创建私有同义词,用户必须拥有Create Any Synonym系统权限。

公有同义词可被所有的数据库用户访问。要创建公有同义词,用户必须拥有Create Public Synonym系统权限。

创建私有同义词语法:

Create [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name; 其中:OR REPLACE表示在同义词存在的情况下替换该同义词。

synonym_name表示要创建的同义词的名称。

object_name指定要为之创建同义词的对象的名称。

示例1:create synonym s_emp for scott.emp;

创建公有同义词语法:

Create PUBLIC SYNONYM synonym_name FOR [schema.]object_name;

示例2:create public synonym emp_syn from scott.emp;

可以查询字典视图User_Synonyms来查看用户所创建的同义词的详细信息

删除同义词语法:Drop Synonyms synonym_name; 删除公有同义词加上一个Public 此命令只删除同义词,不会删除对应的表。

2、序列:是用来生成唯一、连续的整数的数据库对象。序列通常用来自动生成主键或唯一

键的值。

创建序列语法如下:

Create SEQUENCE sequence_name

[START WITH integer]

[INCREMENT BY integer]

[MAXVALUE integer|NOMAXVALUE]

[MINVALUE integer|NOMINVALUE]

[CYCLE|NOCYCLE]

[CACHE interger|NOCACHE];

其中:START WITH是指定要生成的第一个序列号。对于升序序列,其默认值为序列的最小值。对于降序序列,其默认值为序列的最大值。

INCREMENT BY是用于指定序列号之间的间隔。其默认值为1。如果integer为正值,则生成的序列将按升序排列,否则按降序排列。

MAXVALUE指定序列可以生成的最大值。

NOMAXVALUE这是默认选项,将升序序列的最大值设为10的27次幂,将降序序列的最大值设为-1。

MINVALUE指定序列的最小值。MINVALUE必须小于或等于START WITH的值,并且必须小于MAXVALUE。

NOMINVALUE这是默认选项,将升序序列的最小值设为1,将降序序列的最小值设为-10的26次幂。

CYCLE指定序列在达到最大值或最小值后,将继续从头开始生成值。

NOCYCLE这是默认选项。指定序列在达到最大值或最小值后,将不能再继续生成值。 CACHE使用CACHE选项可以预先分配一组序列号,并将其保留在内存中,这样可以更快的访问序列号。

NOCACHE此项则不会为加快速度而预先分配序列号。如果在创建序列时忽略了CACHE和NOCACHE选项,Oracle将默认缓存20个序列号。

示例3:Create SEQUENCE toys_seq

START WITH 10

INCREMENT BY 2

MAXVALUE 2000

MINVALUE 10

NOCYCLE

CACHE 30;

访问序列:可以通过CURRVAL和NEXTVAL伪列来访问该序列的值。

示例4:演示从序列toys_seq中选择值插入toys表中的toyid列。执行成功将会在该表的toyid列插入值"P10"和"P12"。

INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'TWENTY',25); INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'MAGIC PENCIL',75);

示例5:演示如何查看序列当前值

Select toys_seq.CURRVAL from dual;

更改序列:ALTER SEQUENCE命令用于设置或删除MINVALUE或MAXVALUE、修改增量值、修改缓存中的序列号的数目。

修改序列语法如下:注意,不能修改序列的START WITH参数。在修改序列时,应注意升

序序列的最小值应小于最大值。

ALTER SEQUENCE [schema.]sequence_name

[INCREMENT BY integer]

[MAXVALUE integer|NOMAXVALUE]

[MINVALUE integer|NOMINVALUE]

[CYCLE|NOCYCLE]

[CACHE interger|NOCACHE];

示例6:演示如何设置一个新的MAXVALUE,并为toys_seq序列打开了CYCLE。 ALTER SEQUENCE toys_seq

MAXVALUE 5000

CYCLE;

可以查询字典视图User_Sequences来查看用户所创建的序列的详细信息

删除序列语法:Drop SEQUENCE toys_seq;

[local]2[/local]

更多相关推荐:
Dreamweaver的个人总结

个人总结学习Dreamweaver的这一个学期张老师讲了Dreamweaver知识和基本的PHP知识让我受益匪浅自己能够做一个小型的静态网页计算机知识是博大精深的它需要不断的学习来解决现实里的实际问题Adobe...

Dreamweaver网页制作技巧心得体会

Dreamweaver网页制作技巧心得体会熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择CustonStyle来调用Style标准,也可以在状态栏中的元素列表上单击右键来调用Sty…

Dreamweaver课程总结

Dreamweaver课程总结Web静态页面与浏览器基础知识:web静态页面:web静态页面是指在浏览器显示出来的一系列的文字和各种的表格图片的集合。web静态页面具有的优点是:1.相应快。在同等条件下。一个静…

dreamweaver 网页设计总结

任务驱动教学的实践与探索----------谈《Dreamweaver网页设计》的实践教学刘敏:《任务驱动教学反思与重建》提出“任务驱动”教学法,是一改以往由教师提出任务的做法,让教师通过创设情景、作品演示、调…

Dreamweaver课程总结

第一章网页设计基础一TCPIP协议传输控制协议互联网络协议TCP和IP可以单独使用但经常是协同工作互相补充简单地说IP提供了数据传输的灵活性TCP提供了数据传输的可靠性二Internet采用一种唯一通用的地址格...

dreamweaver实验报告

实验报告课程名称指导教师学院专业班级学生姓名学号一实验目的和要求1熟悉Dreamweaver操作界面文档和本地站点的创建2练习使用Dreamweaver编辑网页二实验原理掌握Dreamweaver的操作环境利用...

Dreamweaver考题总结

Dreamweaver考题总结技巧综合1涉及菜单或者面板题目将英文翻译为中文或者中文翻译成英文就为正确答案例16267810151721226728303132349121314192根据常识做出合乎逻辑的判断...

Dreamweaver网页设计_实训报告

广播电视大学实训报告书一说明1浅灰色部分由学生填写2白色部分为教师判分用3本报告与学生实际作品相关联实训报告书二说明1浅灰色部分由学生填写2白色部分为教师判分用3本报告与学生实际作品相关联实训报告书三说明1浅灰...

Flash和Dreamweaver要点总结

FLASH动画处理技术要点操作要点1动画的存储格式新建打开文件常规文件按模板创建显示帧2打开库素材导入使用已有库中的图片P9修改文件属性3工作区工作区域选择窗口工作区传统库窗口库属性窗口属性4图层普通图层引导图...

校内实习之Dreamweaver mx 20xx网页制作心得的计划书

校内实习计划书姓名学号学院专业信息与计算科学实习内容DreamweaverMX下的网页设计与制作辅助软件FireworksMXFlash校内实习计划书一目的为了让自己在实习期间学有所成培养自己的自学能力将理论和...

Dreamweaver实验报告 - 副本

实验报告教技1101班1103014032苏永吉一实验目的要求1熟悉Dreamweaver的操作界面能够创建站点和文档利用其基本功能进行简单的编辑操作2能够使用Dreamweaver软件制作简单的网页二实验仪器...

Dreamweaver网页设计实训报告-06

中央广播电视大学实训报告书说明1浅灰色部分由学生填写2白色部分为教师判分用3本报告与学生实际作品相关联

dreamweaver学习总结(10篇)