完美Oracle数据库知识学习文档总汇_第1页
完美Oracle数据库知识学习文档总汇_第2页
完美Oracle数据库知识学习文档总汇_第3页
完美Oracle数据库知识学习文档总汇_第4页
完美Oracle数据库知识学习文档总汇_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

令完美Oracle数据库知识学习文档总汇

令ORACLE

一.DDL(数据定义语言)

Oracle自动在语句执行前后都加上commit,则DDL之前的没提交改变被隐式提交,不能回滚.

数据类型

1.合法表示符(标示符)

1一30个字符,以字符(能够#$_)开始,数据库链接能够包含(@,)两个特殊符号.不能包含引号,

不能是保留字

特殊情况:数据库名称最多8个字符,数据库链接最多128个字符,把列名放入引号能够使用保留

字作为列名.

ORACLE数据库的端口默认是1521

2.NUMBER

<column_name>Number(precision[,scale])

precision:有效位数总数,1—38,包含小数位

scale:小数位数,没有小数能够省略小数与小数点;省略此参数表示一个整数;当scale>

precision,则会在有效位之前加0

3.CHAR

<column_name>char(size)

size:1--2000字节,值不足size时,会自动在值后面补充空格.

<column_name>char(size[CHAR|BYTE])指出基于字符或者字节,9i以上版本

考虑数据库参数NLS_LENGTH_SEMATICS

(showparametersnlslength_semantics能够看当前设置).

4.NCHAR

与char差别在于它规定的是最大字符个数.支持Unicode可变长度的字符集.最大也是2000字节

容量.

5.VarChar2

与char差别仅仅是:不可能自动在值后面补充空格.最大4000字节,默认基于字节.

6.NVarChar2

存储可变长度且基于字符数量的数据.

7.RAW

与VarChar2类似,用于可变长度的二进制数据,但最大只有2000字节.

8.LOB

大对象,包含BLOB(二进制字节)CLOB(字符)NCLOB(国家字符)BFILE(二进制文件),最大可到4GB

的数据.支持分段访问,支持Oracle对象,还能够用PL/SQL的DBMS_LOB包进行处理.

9.Date精确到秒的时间.通常被误认为只是到天.9i之前唯一存在的时间类型.

Date'yyyy-mm-dd'生成一个日期,date*2006-08-15T.这里没有小时,分,秒,也务必

yyyy-mm-dd的格式.

To_date(日期值,格式串)生成一个日期,格式串:yyyymmdd分别表示年月日.

使用DD-MON-YYYY,MON-DD-YYYYYYYY-MON-DD-YYYY表示时都应该基于其安装的系统,中文Oracle

需要使用‘月'标识月字段.

showparametersnls_date_format(查看默认日期格式),

9i默认的格式:DD-Mon-RR

8.x:DD-Mon-RR

7.3及下列:DD-Mon-YY

假如在windows系统中设置了了注册表中的NLS_LANG,则所有的NLS_*参数都会被忽略.这时或

者者根本没有设置nls_date_format参数,使用不加格式串的to_date函数就会失败.

—insertintoTest(event,"data")

valuesCTableMade),TO_DATE('Dec-2-2004),'MON-DD-YYYY"));〃Dec无效!中文

Oracle需要使用‘月'标识月字段.

insertintoTest(event,"data")

valuesCTableMade*,SYSDATE);〃SYSDATE生成系统日期

insertintotest2(event,"Date")

values('TableMade',T0_DATE('01-12月-04','DD-MON-YY'));

insertintotest2(event,"Date")

valuesCInsertfirstvalue',to_date('12月-21-2004'MON-DD-YYYY'));

insertintotest2(event,"Date")

values('Insertfirstvalue",to_date('2004T2月-31','YYYY-MON-DD'));

insertintotest2(event,"Date")

valuesCTableMade',T0_DATE('01-12月-04','DD-MON-YYYY"));

insertintotest2(event,"Date")

valuesCTableMade',TO_DATE(,01T2月-03'))

//日-月-年月-日-年年-月-日三种顺序有效!!;

SQL>selectto_char("Date",'DD-MON-YYHH12:MI:SS,)"Date"fromtest2;

Date

31-12月-0403:52:39

31-12月-0412:00:00

21T2月-0412:00:00

10.TIMESTAMP对秒提供最多9位小数精度的时间.9i

Sysdate能够直接产生一个timestamp的.

<column_name>Timestamp[seconds_precision]〃精度指出秒的小数位数,默认为6,可选0-9.

11.TIMESTAMPWITHTIMEZONE

<col>Timestamp[secondsprecision]WITHTimeZone

timestamp2004-12-3115:00:000000GM丁

timestamp(2006-08-1417:41:000000-5:00,

12.TIMESTAMPWITHLOCALTIMEZONE

插入的数据在查询时将考虑时区转换到当前时区.

altersessionsettime_zone=,-05:00'〃设置时区,执行查询时将根据设置的时区返回相

应的结果.

插入:

timestamp42004-12-3120:00:000000GMT,

假如当地时区为-05:00,则查询结果为

31-Dec-0403.00.00.000000PM

改时区为'GM丁再次查询,结果为:

31-Dec-0408.00.00.000000PM

-Createtable

createtableTIMECOMP

EVENTVARCHAR2(100),

NORMALCDATE,

TIMESTAMPCTIMESTAMP(6),

TIMESTAMPZCTIMESTAMP(6)WITHTIMEZONE,

TIMESTAMPLOCALZCTIMESTAMP(6)WITHLOCALTIMEZONE

insertintotimecomp(event,normalc,timestampc,timestampzc,timestamplocalzc)

valuesCTest各个日期的区别',sysdate,sysdate,

timestamp'2006-08-1418:14:15.000000-5:00',

timestamp;2006-08-1418:14:15.000000EST')

select*fromtimecomp;

EVENTTest各个日期的区别

NORMALC2006-8-1418:36:25

TIMESTAMPC14-8月-0606.36.25.000000下午

TIMESTAMPZC14-8月-0606.14.15.000000下午-05:00

TIMESTAMPLOCALZC15-8月-0606.14.15.000000上午

altersessionsettimezone='-5:00'

select*fromtimecomp;

EVENTTest各个日期的区别

NORMALC2006-8-1418:36:25

TIMESTAMPC14-8月-0606.36.25.000000下午

TIMESTAMPZC14-8月-0606.14.15.000000下午-05:00

TIMESTAMPLOCALZC14-8月-0605.14.15.000000下午

altersessionsettime_zone='-8:00’

select*fromtimecomp;

EVENTTest各个日期的区别

NORMALC2006-8-1418:36:25

TIMESTAMPC14-8月-0606.36.25.000000下午

TIMESTAMPZC14-8月-0606.14.15.000000下午-05:00

TIMESTAMPLOCALZC14-8月-0602.14.15.000000下午

13.INTERVALYEARTOMONTH

INTERVALYEAR[(YEAR_PRECISION)]TOMONTH

〃精度默认2,可选0—9

14.INTERVALDAYTOSECOND

INTERVALDAY[(DAY_PRCISION)]TOSECOND[(SECOND_PRECISION)]

〃可选0-9,日精度默认2,秒精度默认6.

createtableINTERVAL

(

NAMEVARCHAR2(20),

EVENTVARCHAR2(100),

BEGINTIMESTAMP(6)WITHTIMEZONE,

ENDTIMESTAMP(6)WITHTIMEZONE,

BREAKINTERVALDAY(4)TOSECOND(2)

)

insertintointerval(name,event,begin,end)

valuesCAiSee','2aEOintervalEy%YAaDl,,timestamp'2006-08-1419:12:19.000000-5:00',

timestamp)2006-08-1419:13:45.000000-6:00,)

select*frominterval

AiSee测试interval数据类型14-8月-0607.12.19,000000下午-05:00

14-8月-0607.13.45.000000下午-06:00

insertintointervalselectname,event,begin,end,end-beginfrominterval

select*frominterval

AiSee测试interval数据类型14-8月-0607.12.19.000000下午-05:0014-8月-06

07.13.45.000000下午-06:00

AiSee测试interval数据类型14-8月-0607.12.19.000000下午-05:0014-8月-06

07.13.45.000000下午-06:00+000001:01:26.00

15.ANSI数据类型

ORACLE支持工业标准的ANSI数据类型,与IBMDB/2与SQL/DS数据类型.出于某种原因选择它们

比较合适.

二些数据库设计工具能够导出能被其他数据库使用的ANSI兼容的SQL.

在其他数据库上使用的SQL教本不需要转换称之ORACLE语法就能够在ORACLE使用,

当使用ANSI,IBMBD/2,SQL/DS数据类型建立列的时候,会被隐式转换位合适的

ORACLE内部类型.

createtableANSITYPE2

(

INTEGER2NUMBERINTEGER,

DEC2NUMBERdec(9,2),

CHARACTER2VARCHAR2charactervarying(30),

NATI0NALCHAR2NCHARNationalCHAR(3)

)

SQL>descANSITYPE;

NameTypeNullableDefaultComments

INTEGER2NUMBERINTEGERY

DEC2NUMBERNUMBER(9,2)Y

CHARACTER2VARCHAR2VARCHAR2(30)Y

NATIONALCHAR2NCHARNCHAR(3)Y

等价于:

-Createtable

createtableANSITYPE

(

INTEGER2NUMBERINTEGER,

DEC2NUMBERNUMBER(9,2),

CHARACTER2VARCHAR2VARCHAR2(30),

NATI0NALCHAR2NCHARNCHAR(3)

可用SQL数据类型Oracle等价数据类型

NUMERIC(PRECISION,SCALE)NUMBER(PRECISION,SCALE)

DECIMAL(PRECISION,SCALE)NUMBER(PRECISION,SCALE)

INTEGERNUMBER(38)

INTNUMBER(38)

SMALLINTNUMBER(38)

FLOAT(b)NUMBER

DOUBLEPRECISIONNUMBER

REALNUMBER

CHARACTER(size)CHAR(size)

CHAR(size)CHAR(size)

CHARACTERVARYING(size)VARCHAR(size)

CHARVARING(size)VARCHAR(size)

NATIONALCHARACTER(size)NCHAR(size)

NATIONALCHAR(size)NCHAR(size)

NCHAR(size)NCHAR(size)

NATIONALCHARACTERVARYING(size)NVARCHAR2(size)

NATIONALCHARVARYING(size)NVARCHAR2(size)

NCHARVARYING(size)NVARCHAR2(size)

二.SELECT

Select增值服务

16.有什么表,试图呢?

selecttable_namefromdba_tables;

17.当前用户是谁?

selectuserfromuser_tablesgroupbyuser;

showuser;一Thesameasaboveparagraphs

18.当前用户有什么表:

SQL>selecttable_namefromuser_tables;

19.选择某一用户的表名

selecttable_namefromdba_tableswhereowner='SYSTEM';

20.想明白有多少个用户吗?

selectownerfromdba_tablesgroupbyowner;

21.想明白表EMP是谁的吗?

selectownerfromdba_tableswheretable_name='EMP';

22.索引增加的描述

SELECTNAME,HEIGHT,LF_BLKS,LF_ROWS,DEL_LF_ROWS,PCT_USED

FROMINDEX_STATS

查询:表名,索引高度,叶子结点数,行数,标记为删除的行数,索引结点占空间的百分比例(有自由

空间时一定小于100)

由于针对索引表,前期需要:

SQL>createindexindex_objname_indexTestonindexTest(object_name)pctfree10;

索引已创建。

SQL>analyzeindexindex_objname_indexTestvalidatestructure;

索引已分析

SQL>analyzeindexTestindex_objname_indexTestcomputestatistics[forowner];

索引已分析

查询过滤

23.where限定语句

select<column>from<data_source>

where<condition_expression>

a=ba>ba<ba!=baOb[NULL不等于NULL]

BETWEENaANDb

aLIKEb[表达式b使用通配符为表示0,1,多个字符_代表一个字符]

aNOTLIKE〈条件〉

24.and/or:

在where中实现连接多个子句,形成复合条件,

注意AND的优先级高于0R

注意能够用(括号)提高优先级

25.DISTINCT不想要重复的信息?

selectdistinctownerfromDBA_TABLES;//重复的owner只显示一条

distinct只支持一个字段的查询,一个SQ1语句中只能用一次(注意:通配符*会被认为是一

个字段)

26.Like/NotLike

select*frominsert_Selectwherewordnotlike'_ct%';

代表单字符(必占用5,对弋表多个字符(可占可不占5

27.通配符与转义字符

代表一个仟音字符

%代表任意数赢任/字符

ESCAPE:定义一个转义字符,如ESCAPE'\'定义'为转义字符,所谓转义字符指紧跟在它

后面的特殊字符(上面的_%)表示普通的字符.

select*fromTMPwherenamenotlike'\_°/oESCAPE'\';

查询name第一个字母不是_的所有记录

28.IN/NOTIN运算符

select*frominsert_Selectwherewordin(*act),'active');

29.Any/ALL

select*frominsert_Selectwhereword>Al1(selectwordfromenstudywherewordLike

'a%');

select*frominsertSelectwhereword<Any(selectwordfromenstudywherewordLike

,a%);"

30.EXISTS/NOTEXISTS存在性条件

select*frominsertSelect

whereword>All(selectwordfromenstudywherewordLike'a%")

andexists(

select*frominsert_Selectin_S,enstudyensdwherein_S.word=ensd.word);

31.BETWEEN运算符

select*frominsert_Selectwherewordbetween'act'and'zz";

小的值应该放在前面部务.

32.连接运算符:||重新组合/命名结果

selectWORD|I'||pronounce||frominsert_Select;

//SQLServer,MSAccess使用+作连接符

33.orderby[desc]排序可接多个列或者表达式+

orderbysalarydesc按salary降序排列返回值

orderbysalary,iddesc首先按salary升序排列,再按id降序排列

orderby1;表示按第一列排序

select*fromtmporderby1,2,3desc按第一第二升序,第三列降序排列

注意:参与排序的列不一定会出现在select子句中,也即是不一定出现在结果中.NULL出现在排

序的最前面.

34.groupby与having

如今se1ect字句中的每个列都是groupby字句的列或者列函数.

groupby<column_name>把返回结果按指定列名分组,同一组只显示一项

having在使用了groupby<colunin_nanie>后成为可选,后面跟一个条件.与where不一致,where

是在数据分组前进行选择,having是在查疝结果中分组之后进行再选.

distinct只支持一个字段的查询,一个SQ1语句中只能用一次(注意:通配符*会被认为是一

个字段)

groupby支持多字段的查询,

selectevent,avg(salary),max(salary)fromtest2

whereeventisnotNULL

groupbyavg(salary)havingeventisnotNULL

orderbymax(salary);

35.集合函数

SUM求与

MAX最大

MIN最小

AVG平均数

COUNT个数

36.表别名(不能够加as),列别名(能够加as)

selectcxdx.cxdx_dm,cxdxme,zbmc,tjzd.cxzbdm,tjzd.tj

fromdsdm.dm_zhcx_cxdxcxdxinnerjoindsdm.dm_zhcx_tjzdtjzd

oncxdx.cxdx_dm=tjzd.cxdx_dm

wherecxdx.cxdx_dmbetween13and13

selectcxdx_dm"Dm”,cxdx_mcASMe,zbmc,cxzb_dm,tj

fromdsdm.dm_zhcx_cxdxnaturaljoindsdm.dm_zhcx_tjzd

wherecxdx_dmbetween13and13;//as关键字可选

关于在不一或表中有相同名称的列才会强制加上表别名.

把别名用双引号引用能够避免返回结果用完全大写的列名.(强调为小写)

ANSI联接,直接表关联

37.自然联接naturaljoin:

自动将两个表相同名称的列联接,用户不需要命名原先联接的列,这里不同意使用别名.

这将会强制设计者将要联接的列使用相同的名称,而且不能让其他的列有相同的名称,否则。racle

将一起联接他们.

R1(A,B)R2(A,C)R3(A,D)用sql语句把这三个表连接成一个模式为(A,B,C,D)的表

SELECTRl.AASA,RI.BASB,R2.CASC,R3.DASDFROMRIINNERJOINR2ONRI.A=R2.AINNER

JOINR3ONR1.A=R3.A

38.内联接innerjoin

select…form11innerjoint2on<expression>…用户规定了要联接的各个表的列.将只

返回满足条件的行,忽略条件一方为NULL的行.

select*fromstudentstinnerjoinscoresconst.id=sc.id

〃内联接:两个表存在主外键关系经常用内联接查询。

39.外联接

select*fromstudentstleftouterjoinscoresconst.id=sc.id

〃左外联接:结果包含左表的所有行,假如左表的行在右表中没有匹配的行,则为空值

select*fromstudentstrightouterjoinscoresconst.id=sc.id

〃右外联接:结果包含右表的所有行,假如右表的行在左表中没有匹配的行,则为空值

select*fromstudentstfulljoinscoresconst.id=sc.id

〃完全外联接:返回左表与右表中的所有行

leftouterjoin/rightouterjoin/fullouterjoin

//返回内联接的结果与存在左/右表中,而另一个表没有相应行的所有行.(同内联接有。n…条件

子句.)

Left时,尽可能多返回第一个表的行,right时尽可能返回第二个表的行.

完全外联接在where子句后面用带括号的加号(+)表示.无join与on子句.

selectcxdx.cxdx_dm,cxdx_mc,zbmc,tjzd.cxzb_dm,tjzd.tj

fromdsdm.dm_zhcx_cxdxcxdx,dsdm.dm_zhcx_tjzdtjzd

wherecxdx.cxdx_dm=tjzd.cxdx_dm(+)

andcxdx.cxdx_dmbetween10and12

一种说法是+号的另一侧的列能够为空(P37,0racle9iJDBC编程).

ConnIC/IC;

selectNVL(tl.id,99099)ASID1,NVL(tl.name,'IamNULL*)ASnamel,tl.p6s3,

NVL(,?IamNULL')ASname2,NVL(t2.id,99900)ID2,t2.salary

fromtempt2,tmptl

wheretl.name(+)=t2.name;

这里认为t2.name能够为空.但结果包含了部分tl.name为空的记录.

下面的更加直接.

selectNVL(t1.id,99099)ASID1,NVL(tl.name,?IamNULL,)ASnamel,11.p6s3,

NVL(t2.name,?IamNULL')ASname2,NVL(t2.id,99900)ID2,t2.salary

fromtempt2,tmptl

wheretl.name=

ORisnullandtl.nameisNOTNULL

注意AND的优先级高于OR

自联接某些表能够拥有自引用外键,一个列是其所在表的主键的一个外键.这时需要使用表别名

消除模糊:

selectel.last_name“Employee”

e2.last_name“ReportTo”

fromemployeeselleftouterjoinemployeese2

onel.manager_id=e2.employee_id

orderbyel.employee_id

40.不想用联接?

直接查询两个表

SQL>selecta.CXZB_DM,a.CXZB_MC,b.CXDX_DM

fromDSDM.DM_ZHCX_CXZBa,DSDM.dm_zhcx_tjzdb

whereCXZB_LX='2'anda.CXZB_DM=b.CXZB_DM;

//把where字句的=改为*=或者者=*就表示左/右外联接

集合操作

不同意使用order,不能在BLOB,Long这样的大数据对象上使用集合操作.各个单独的Select表的

数量与数据类型务必完全相同.

41.UNION

取第一个查询的所有行与第二个查询的所有行的并集.

Selectemployee_id,last_namefromemployees

wherelast_namelike'A%'orlast_namelike'B%'

UNION

Selectemployee_id,last_namefromemployees

wherelast_namelike'B%'orlast_namelike'C%'

将返回last_name以A,B或者C开头的因此employee_id,last_name行

42.UNIONALL

取两次查询的与,而不消除重复的行.ABBC开头的,注意B两次出现.

43.INTERSECT

取两次的交集.即B开头

44.MINUS

取在第一次返回而第二此不返回的结果.即A开头

三.Table(表)

TableDDL,Constraint

45.建立表

createtable[schema.]<TABLE_NAME>(

<COLUMN_NAME><datatype>[default〈expression>][<constraint>

[,<COLUMN_NAME><datatype>[default<expression>][〈constraint>]];

46.约束语法

altertable[schema.]<table_name>add[constraint[<name>]]<constraintdefinition>

创建表时的语法:[constraint[<name>]]<constraintdefinition>

主键constraintcs_nameprimarykey(columun_name)任一表最多一个主键,能够由一

个或者者多个列(max=32)共同拓成一个主键.表中任意两行而主键列的值不能为NULL也不能相同.

唯一性constraintcs_nameunique(columun_name)最多由32列构成,多个列即为复合唯一键,

唯一键约束同意多个NULL.唯一键建立后,oracle会是后台建立一个唯一性索引来强制唯一性.假如已

经为唯一键建立了索引,oracle会使用已有的索引.

夕卜键constraintcs_nameforeignkey(columun_name)references

parenttabiename(columunname)被参照的父表列为唯一键或者者主键,子表插入记录时能够为空.

外键能够自参照.也可组合委个列成为复合外键(如今,复合外键所拥有的子表列要与父表列的数量类

型都匹配).当插入一行,外键不为空而父表中被参照的列没有相应的行,则插入失败.外键本身不要

求非空.

altertableinsert_Selectaddconstraintfk_insert_Selectforeignkey(word)references

enstudy(word);

Check约束constraintcs_namecheck(sexin('MALE','FEMALET))

47.建立有约束的表

createtablesignificant_Others(

customer_numberintnotnullprimarykey,

significant_otherint,

informationNVARCHAR2(15),

foreignkey(information)referencesenstudy);

//enstudy务必有主键,而且主键为NVARCHAR2(15).

createtableC0NSTRAINTS2

(

ID1VARCHAR2(10)notnull,

ID2VARCHAR2(10)notnull,

NAMEVARCHAR2(20),

SEXVARCHAR2(1),

constraintpk_constraints2primarykey(idl,id2)

)

48.createtable••,asselect…where…

createtableinsert_Select2asselectword,pronouncefromenstudy;

查询一个表以创建另一个表,这里支持对象(如约束/索引/触发器)将不可能被建立.

使用where1=0能够只复制结构.

49.删除约束

altertableenstudydropconstraintpk;

//

ERROR位于第1行:

ORA-02273:此唯一/主键已被某些外部关键字引用

50.创建视图

createviewcor_ViewasselectwordasW0RD_Se,pronounceasPROfromenstudy;

由于视图是一个拾定的查询结果集,因此能够使南符合查询或者者嵌套,JOIN,UNION

对视图的改变将反映到原始表!!

DML(DataManipulationlanguage)

51.INSERT插入一行

Insertinto<t_name>(<col_namel>[,<col_name2>***.])

Values«valuel>[,<value2>---]);

52.insertinto…select...from…where…

insertintocopy_tabSelectword,pronouncefromenstudywhereword='able';

53.UPDATE修改行

Updateemployees

Setsalary=salary*1.15

Wherejob_id=,IT_PROG';

54.DELETE

Deletefromemployeeswherejob_id=<IT_PR0G,;

这里不限使用一个条件,假如不提供条件则会删底表的所有记录.

55.COMMIT

一旦提交就不能回滚回到前面的状态.

56.ROLLBACK

回滚到最近•次commiI或者者ro11back后的状态.

57.全局临时表

createglobaltemporarytablesession_tab

oncommitpreserverows

asselect*

fromemployees

createglobaltemporarytableteansaction_tab

oncommitdeleterows

asselect*from

employees

where1=0

修改表结构

58.添加一列add

altertablepeopleadd(cell_numbervarchar2(10));

59.修改一列Modify

//NOTNULL约束

Altertablepeople

Modify(ssnnumber(9)notnull);

60.删除列标注不用的列

altertable<table_name>Dropcloumn<cloumn_namel>

altertable<table_name>Dropcloumn(cloumnl,column2**\)

〃上面语句将重写表到磁盘,并移走旧的数据.

〃下面将不重写也不收回空间,关于大表将节约时间.

Altertable<table_name>setunusedcolumn

Altertable<table_name>setunused(column,column2***)

〃下面删除unused列

altertable<table_name>DROPUNUSEDCOLUMN

〃查找不用的列

select*fromuser_unused_col_tabs;//返回两歹(table_name,count)

61.重命名表

altertablepeoplerenametoemployee

62.删除表

droptable<table_name>[cascadeconstraints]

可选参数选中后将向时删除子表外键.

63.TRUNCATETABLE清除数据,保留表

TRUNCATETABLE[SCHEMA.]<table_name>[DROPSTORAGE|REUSESTORAGE]

〃快速清除表中的数据,保留表,且不可能生成回滚数据.

不可能激活ONDELETE触发器

务必先禁用因此子表外键,务必具有DROPTABLE特权,是一个DDL语句,因此不能回滚.

DROPSTORAGE:默认选项.只有最初为表分配的盘区(MINEXTENTS)会被保留给新行.

REUSESTORAGE:保留表的所有盘区,适合快速增长的表.

四.View(视图)(省略了很多细节)

关系视图

64.建立视图

createviewmy_vas

selectfirst_nameIT,'Ilast_nameNAME

fromHR.employees;一重命名是务必的,当使用列连接时.

一Groupby,orderby,having子句是同意的.也同意Union两个查询.

65.我需要什么权限?

需要有视图所引用的表的选择的权限.

需要有创建视图的权限::

grantcreate[any]viewtoIC;―userIC具有了创建视图的权限

66.视图的作用?

把复杂的查询定义在可重用视图中,能够隐藏查询的负责性,

限制查询的返回,比如定义视图时不选择薪资字段,再把视图的选择权授予public,而收回表的

选择权,能够限制表数据的返回,也能够在视图的查询中增加WHERE子句,限制行的返回,

通过给予视图的SELECT权限更加有效的保护表中的数据.

67.能够建立同义词

createpublicsynonymtable_nameforuserl.table_name;

68.有什么视图?

selectviewnamefromuser_views;

69.视图的原始定义

selectviewname,textfromuser_views;

70.改变视图

createorreplaceviewms_vas

select*fromms;

-不可能缺失往常授予对视图操作的特权

71.删除视图

dropview<view_name>

72.编译视图compile

alterviewview_tcompile;一视图无效后,手工编译视图

73.建立强制视图force

createorreplaceforceviewgolfas

select*

fromiAmNoExsit;

警告:创建的视图带有编译错误。

74.视图的什么列是可更新的?查数据词典user_updatable_columns

descuser_updatable_columns

名称是否为空?类型

OWNERNOTNULLVARCHAR2(30)

TABLE_NAMENOTNULLVARCHAR2(30)

COLUMN_NAMENOTNULLVARCHAR2(30)

UPDATABLEVARCHAR2(3)

INSERTABLEVARCHAR2(3)

DELETABLEVARCHAR2(3)

select*fromuser_updatab1e_co1umns

wheretable_name='COMPANY_PHONE_BOOK'

75.WITHREADONLY建立只读视图

createorreplaceforceviewgolfas

select*

fromiAmNoExsitWITHREADONLY;

~使得视图只读,避免用户通过视图改变了表数据.

76.通过视图更新数据

通常直接从数据表中选择的列能够直接更新,但一些连接(II)成的虚拟列或者者统计列不能直接

更新,如今能够考虑在视图上建立INSTEADOF触发器.

77.WITHCHECKOPTION约束

createorreplaceviewfriendas

select*fromworkMesswhereID=9

withcheckoption;

由于加上了约束,则当DML数据时,只有那些能被视图选中的数据才同意插入或者者更新.

updatefriendsetid=10;

updatefriendsetid=10

*

ERROR位于第1行:

0RA-01402:视图WITHCHECKOPTION违反where子句

但是,如今使用whereid=9条件使得照常能够更新.

insertintofriend(id)values(ll);

insertintofriend(id)values(11)

*

ERROR位于第1行:

ORA-01402:视图WITHCHECKOPTION违反where子句

deletefriend;

已删除1行。

内嵌视图

内嵌视图基本上就是嵌入到父查询中的查询,能够在任何能够使用表的地方使用.内嵌视图是临

时的,它只存在于父查询的运行期间,但是它能够让你在整个查询的任何部分使用视图结果.

78.什么样子的

selectdepartment_name,count(*),

TOCHAR((count(*)/total_emp.ent)*100,'90.99,)||'%'pct

fromhr.departmentsdep,

hr.employeesemp,

(selectcount(*)ent

fromhr.employees)total_emp

wheredep.department_id=emp.department_id

groupbydepartment_name,total_emp.ent

total_emp成为内嵌视图selectcount(*)entfromhr.employees的别名.

类似一

selectdepartment_name,count(*),

TO_CHAR((count(*)/(selectcount(*)fromhr.employees))*100,'90.99')I|'对pct

fromhr.departmentsdep,hr.employeesemp

wheredep.department_id=emp.department_id

groupbydepartment_name

79.ROWNUM有用吗?

ROWNUM是一个反映了从表选取行的次序的伪列,所要选取的第一行ROWNUM值为1,第二行的

rownum为2,后面的行依次类推。但是,ROWNUM值会在用ORDERBY子句之前就指定给了每个行.

内嵌视图使ROWNUM真正有用::

selectlast_name,hire_date

from(selectlast_name,hire_date

fromhr.employees

orderbyhire_date)

whererownum<=5;

上面只能在rownum小于某一值的条件下使用.

假如要取两个参数之间的数据,务必使用row_number()分析函数

SelectSub.*

From(Selectt.*,row_number()over(OrderByName)rFromWorkmant)Sub

WhereRBetween100And120

80.ROWNUM分析函数。嵌套

Qselect*from(

selectt.*,rownumz,afterOrderResultNo/,

from(selectname,salary,rownum“beforeOrderResultNo“fromworkmanwheresex='M"

orderbyname)t

)where"after0rderResultNo”>=2and"after0rderResultNo”<=3

令select*from(

selectid,rorfrom(

selectid,row_number()over(orderbyiddesc)ro

fromrownumtest

)

)

whererbetween1000and1020;

五.数据词典视图

常见的视图(省略了很多细节)

81.数据词典

数据词典是用户在整个ORACLE数据库的编目,当建立用户,表,约束与其他数据库对象时,

ORACLE都会自动保护一个在数据库中存储的项编目.用户通过数据词典能够明白:

所拥有的表的名称与特性

有权查看的所有表的名称与属性

检索存储过程的代码

特定表空间中存储的所有数据文件

罗列依靠于其他对象的对象

82.dictionary

储存了数据词典中所有视图的完整列表与简短描述.

table_name::名称

comments::文本注释

83.DICt_COLUMNS

词典表中的列描述:

tablename::名称

column_name:歹U名

comments::列的文本注释

84.DBA_objects

数据库中所有对象的列表与有关内容

85.dba_tables

数据库中所有表的列表与有关内容

86.dba_tab_columns

表的所有列,视图,簇的信息

87.dba_tab_privs

给予数据库中对象上的特权信息

88.dba_col_privs

数据库特定列上所有特权

89.dba_tab_comments/dba_co1_comments

表与视图上建立的注释

90.dbaconstraints

表上的约束信息

91.dba_cons_columns

数据库表上约束的列的信息信息

92.dba_external_tables

外部表的信息

93.dba_external_locations

外部表的数据位置信息

94.dba_object_tables

对象表的信息

95.dba_coll_types

所有类集类型

温馨提示

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

最新文档

评论

0/150

提交评论