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

下载本文档

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

文档简介

1、PAGE .PAGE :.;PAGE 38第 PAGE 38 页 共 NUMPAGES 38 页第 PAGE 1 页 共 NUMPAGES 38 页ORACLEDDL(数据定义言语)Oracle自动在语句执行前后都加上commit, 那么DDL之前的没提交改动被隐式提交, 不能回滚.数据类型合法表示符标示符1-30个字符,以字符(可以# $ _ )开场,数据库链接可以包含( , )两个特殊符号. 不能包含引号,不能是保管字.特殊情况: 数据库称号最多8个字符, 数据库链接最多128个字符, 把列名放入引号可以运用保管字作为列名.ORACLE数据库的端口默许是1521NUMBER Number(

2、precision,scale) precision: 有效位数总数, 138 , 包括小数位scale: 小数位数,没有小数可以省略小数和小数点; 省略此参数表示一个整数;当 scale precision,那么会在有效位之前加0CHAR char(size) size: 12000字节, 值缺乏size时,会自动在值后面补充空格. char(size CHAR|BYTE) 指出基于字符或字节,9i以上版本 思索数据库参数 NLS_LENGTH_SEMATICS(show parameters nls_length_semantics 可以看当前设置).NCHAR与char差别在于它规定的是

3、最大字符个数.支持Unicode可变长度的字符集. 最大也是2000字节容量.VarChar2与char差别仅仅是:不会自动在值后面补充空格.最大4000字节,默许基于字节.NVarChar2存储可变长度且基于字符数量的数据.RAW与VarChar2类似,用于可变长度的二进制数据,但最大只需2000字节.LOB大对象,包括BLOB(二进制字节) CLOB(字符) NCLOB(国家字符) BFILE(二进制文件), 最大可到4GB的数据. 支持分段访问, 支持Oracle对象, 还可以用PL/SQL的DBMS_LOB包进展处置.Date 准确到秒的时间. 通常被误以为只是到天. 9i之前独一存在

4、的时间类型.Date yyyy-mm-dd 生成一个日期, date 2006-08-15 . 这里没有小时,分,秒, 也必需yyyy-mm-dd的格式.To_date(日期值, 格式串) 生成一个日期, 格式串: yyyy mm dd 分别表示年月日.运用DD- MON-YYYY, MON-DD-YYYY YYYY-MON-DD-YYYY表示时都应该基于其安装的系统, 中文Oracle需求运用月标识月字段. show parameters nls_date_format(查看默许日期格式), 9i默许的格式: DD-Mon-RR8.x: DD-Mon-RR7.3及以下: DD-Mon-YY

5、假设在windows系统中设置了了注册表中的NLS_LANG, 那么一切的NLS_*参数都会被忽略. 这时或者根本没有设置nls_date_format参数, 运用不加格式串的to_date函数就会失败. insert into Test(event,data) values(Table Made,TO_DATE(Dec-2-2004,MON-DD-YYYY) ); /Dec无效 ! 中文Oracle需求运用月标识月字段. insert into Test(event,data) values(Table Made,SYSDATE ) ; /SYSDATE生成系统日期 insert into

6、test2(event,Date) values(Table Made,TO_DATE(01-12月-04,DD-MON-YY) ) ; insert into test2(event,Date) values (Insert first value, to_date(12月-212004 , MON-DD - YYYY ); insert into test2(event,Date) values (Insert first value, to_date(2004-12月-31,YYYY-MON -DD) ); insert into test2(event,Date) values(Tab

7、le Made,TO_DATE(01-12月-04,DD-MON-YYYY); insert into test2(event,Date) values(Table Made,TO_DATE(01-12月-03)/ 日-月-年 月-日-年 年-月-日 三种顺序有效 !; SQL select to_char(Date,DD-MON-YY HH12:MI:SS) Date from test2;Date31-12月-04 03:52:3931-12月-04 12:00:0021-12月-04 12:00:00TIMESTAMP 对秒提供最多9位小数精度的时间. 9i new!Sysdate 可以

8、直接产生一个timestamp的. Timestamp seconds_precision /精度指出秒的小数位数,默以为6,可选0-9.TIMESTAMP WITH TIME ZONE Timestamp seconds_precision WITH Time Zonetimestamp 2004-12-31 15:00:000000 GMTtimestamp 2006-08-14 17:41:000000 5:00TIMESTAMP WITH LOCAL TIME ZONE插入的数据在查询时将思索时区转换到当前时区.alter session set time_zone=-05:00 /设

9、置时区, 执行查询时将根据设置的时区前往相应的结果.插入:timestamp 2004-12-31 20:00:000000 GMT假设当地时区为-05:00,那么查询结果为31-Dec-04 03.00.00.000000PM改时区为GMT 再次查询,结果为:31-Dec-04 08.00.00.000000PM- Create tablecreate table TIMECOMP( EVENT VARCHAR2(100), NORMALC DATE, TIMESTAMPC TIMESTAMP(6), TIMESTAMPZC TIMESTAMP(6) WITH TIME ZONE, TIME

10、STAMPLOCALZC TIMESTAMP(6) WITH LOCAL TIME ZONE)insert into timecomp (event,normalc,timestampc,timestampzc,timestamplocalzc) values(Test 各个日期的区别,sysdate, sysdate, timestamp 2006-08-14 18:14:15.000000 -5:00, timestamp 2006-08-14 18:14:15.000000 EST) select * from timecomp;EVENTTest 各个日期的区别NORMALC2006-

11、8-14 18:36:25TIMESTAMPC14-8月 -06 000000 下午TIMESTAMPZC14-8月 -06 000000 下午 -05:00TIMESTAMPLOCALZC15-8月 -06 000000 上午alter session set time_zone = -5:00select * from timecomp;EVENTTest 各个日期的区别NORMALC2006-8-14 18:36:25TIMESTAMPC14-8月 -06 000000 下午TIMESTAMPZC14-8月 -06

12、000000 下午 -05:00TIMESTAMPLOCALZC14-8月 -06 000000 下午alter session set time_zone = -8:00select * from timecomp;EVENTTest 各个日期的区别NORMALC2006-8-14 18:36:25TIMESTAMPC14-8月 -06 000000 下午TIMESTAMPZC14-8月 -06 000000 下午 -05:00TIMESTAMPLOCALZC14-8月 -06 000000 下午INT

13、ERVAL YEAR TO MONTHINTERVAL YEAR (YEAR_PRECISION) TO MONTH /精度默许2,可选09INTERVAL DAY TO SECOND INTERVAL DAY(DAY_PRCISION) TO SECOND (SECOND_ PRECISION)/可选0-9, 日精度默许2, 秒精度默许6 .create table INTERVAL( NAME VARCHAR2(20), EVENT VARCHAR2(100), BEGIN TIMESTAMP(6) WITH TIME ZONE, END TIMESTAMP(6) WITH TIME ZO

14、NE, BREAK INTERVAL DAY(4) TO SECOND(2) insert into interval(name,event,begin,end) values (AiSee,interval, timestamp 2006-08-14 19:12:19.000000 -5:00 , timestamp 2006-08-14 19:13:45.000000 -6:00 ) select * from intervalAiSee测试interval数据类型14-8月 -06 000000 下午 -05:0014-8月 -06 000000 下午

15、 -06:00insert into interval select name, event,begin,end,end-begin from intervalselect * from intervalAiSee测试interval数据类型14-8月 -06 000000 下午 -05:0014-8月 -06 000000 下午 -06:00AiSee测试interval数据类型14-8月 -06 000000 下午 -05:0014-8月 -06 000000 下午 -06:00+0000 01:01:26.00ANS

16、I 数据类型ORACLE支持工业规范的ANSI数据类型, 以及IBM DB/2 和 SQL/DS数据类型. 出于某种缘由选择它们比较适宜:一些数据库设计工具可以导出能被其他数据库运用的ANSI兼容的SQL. 在其他数据库上运用的SQL教本不需求转换称为ORACLE语法就可以在ORACLE运用,当运用ANSI, IBM BD/2 , SQL/DS 数据类型建立列的时候, 会被隐式转换位适宜的ORACLE内部类型.create table ANSITYPE2( INTEGER2NUMBER INTEGER, DEC2NUMBER dec(9,2), CHARACTER2VARCHAR2 chara

17、cter varying(30), NATIONALCHAR2NCHAR National CHAR(3) SQL desc ANSITYPE ;Name Type Nullable Default Comments INTEGER2NUMBER INTEGER Y DEC2NUMBER NUMBER(9,2) Y CHARACTER2VARCHAR2 VARCHAR2(30) Y NATIONALCHAR2NCHAR NCHAR(3) Y等价于:- Create tablecreate table ANSITYPE( INTEGER2NUMBER INTEGER, DEC2NUMBER NU

18、MBER(9,2), CHARACTER2VARCHAR2 VARCHAR2(30), NATIONALCHAR2NCHAR NCHAR(3)可用SQL数据类型Oracle等价数据类型NUMERIC(PRECISION,SCALE)NUMBER(PRECISION,SCALE)DECIMAL(PRECISION,SCALE)NUMBER(PRECISION,SCALE)INTEGERNUMBER(38)INTNUMBER(38)SMALLINTNUMBER(38)FLOAT(b)NUMBERDOUBLEPRECISIONNUMBERREALNUMBERCHARACTER(size)CHAR(s

19、ize)CHAR(size)CHAR(size)CHARACTER VARYING(size)VARCHAR(size)CHAR VARING(size)VARCHAR(size)NATIONAL CHARACTER(size)NCHAR(size)NATIONAL CHAR(size)NCHAR(size)NCHAR(size)NCHAR(size)NATIONAL CHARACTER VARYING(size)NVARCHAR2(size)NATIONAL CHAR VARYING(size)NVARCHAR2(size)NCHAR VARYING(size)NVARCHAR2(size)

20、SELECTSelect增值效力有哪些表,试图呢 ?select table_name from dba_tables;当前用户是谁 ?select user from user_tables group by user ;show user ; - The same as above paragraphs当前用户有哪些表 :SQL select table_name from user_tables ;选择某一用户的表名select table_name from dba_tables where owner = SYSTEM ;想知道有多少个用户吗 ?select owner from d

21、ba_tables group by owner ;想知道表EMP是谁的吗 ?select owner from dba_tables where table_name = EMP ;索引添加的描画SELECT NAME ,HEIGHT,LF_BLKS,LF_ROWS,DEL_LF_ROWS, PCT_USED FROM INDEX_STATS 查询: 表名,索引高度,叶子结点数,行数,标志为删除的行数,索引结点占空间的百分比例(有自在空间时一定小于100)由于针对索引表,前期需求:SQL create index index_objname_indexTest on indexTest(ob

22、ject_name) pctfree 10;索引已创建。SQL analyze index index_objname_indexTest validate structure ;索引已分析SQL analyze indexTest index_objname_indexTest compute statistics for owner ;索引已分析查询过滤where 限定语句select from where a=b ab ab a != b ab NULL 不等于NULL BETWEEN a AND b a LIKE b 表达式b 运用通配符 %表示0,1,多个字符 _ 代表一个字符 a

23、NOT LIKE and / or :在where中实现衔接多个子句,构成复合条件, 留意 AND 的优先级高于 OR留意 可以用括号提高优先级DISTINCT 不想要反复的信息 ?select distinct owner from DBA_TABLES ; / 反复的owner只显示一条distinct 只支持一个字段的查询,一个SQl语句中只能用一次留意:通配符 * 会被以为是一个字段Like / Not Likeselect * from insert_Select where word not like _ct%; _代表单字符必占用, %代表多个字符可占可不占通配符和本义字符_ 代

24、表一个恣意字符,% 代表恣意数量的恣意字符ESCAPE: 定义一个本义字符, 如 ESCAPE 定义 为本义字符, 所谓本义字符指紧跟在它后面的特殊字符( 上面的 _ % ) 表示普通的字符.select * from TMP where name not like _% ESCAPE ;查询name第一个字母不是 _ 的一切记录IN /NOT IN 运算符select * from insert_Select where word in( act,active);Any /ALLselect * from insert_Select where word All (select word f

25、rom enstudy where word Like a%) ;select * from insert_Select where word All (select word from enstudy where word Like a%) and exists(select * from insert_Select in_S, enstudy ensd where in_S.word=ensd.word) ;BETWEEN运算符select * from insert_Select where word between act and zz;小的值应该放在前面部分.衔接运算符: | 重新组

26、合/命名结果select WORD | | pronounce | from insert_Select;/SQL Server, MS Access 运用 + 作衔接符order by desc排序 可接多个列或表达式+order by salary desc 按salary降序陈列前往值order by salary, id desc 首先按salary升序陈列,再按id降序陈列order by 1 ; 表示按第一列排序select * from tmp order by 1,2,3 desc 按第一第二升序,第三列降序陈列留意: 参与排序的列不一定会出如今select子句中, 也即是不一

27、定出如今结果中.NULL出如今排序的最前面.group by 和 having此时select字句中的每个列都是group by字句的列或列函数.group by 把前往结果按指定列名分组, 同一组只显示一项having 在运用了group by 后成为可选, 后面跟一个条件. 与where不同, where是在数据分组前进展挑选,having是在查询结果中分组之后进展再选.distinct 只支持一个字段的查询,一个SQl语句中只能用一次留意:通配符 * 会被以为是一个字段group by 支持多字段的查询,select event, avg(salary), max(salary) fro

28、m test2 where event is not NULL group by avg(salary) having event is not NULL order by max(salary);集合函数SUM 求和MAX 最大MIN 最小AVG 平均数COUNT 个数表别名不可以加as, 列别名可以加asselect cxdx.cxdx_dm,cxdx_mc,zbmc,tjzd.cxzb_dm,tjzd.tjfrom dsdm.dm_zhcx_cxdx cxdx inner join dsdm.dm_zhcx_tjzd tjzdon cxdx.cxdx_dm = tjzd.cxdx_dm

29、where cxdx.cxdx_dm between 13 and 13/select cxdx_dm “Dm,cxdx_mc AS Mc, zbmc,cxzb_dm,tjfrom dsdm.dm_zhcx_cxdx natural join dsdm.dm_zhcx_tjzd where cxdx_dm between 13 and 13; /as 关键字可选对于在不同表中有一样称号的列才会强迫加上表别名. 把别名用双引号援用可以防止前往结果用完全大写的列名.强调为小写ANSI 联接, 直接表关联自然联接 natural join: 自动将两个表一样称号的列联接,用户不需求命名原来联接的列,

30、 这里不允许运用别名.这将会强迫设计者将要联接的列运用一样的称号,而且不能让其他的列有一样的称号,否那么oracle将一同联接他们.R1(A, B)R2(A, C)R3(A, D)用sql语句把这三个表衔接成一个方式为(A, B, C, D)的表 SELECT R1.A AS A,R1.B AS B,R2.C AS C,R3.D AS D FROM R1 INNER JOIN R2 ON R1.A=R2.A INNER JOIN R3 ON R1.A=R3.A 内联接 inner joinselect form t1 inner join t2 on 用户规定了要联接的各个表的列. 将只前往满

31、足条件的行,忽略条件一方为NULL的行.select * from student st inner join score sc on st.id =sc.id /内联接:两个表存在主外键关系时常用内联接查询。外联接 select * from student st left outer join score sc on st.id=sc.id /左外联接:结果包括左表的一切行,假设左表的行在右表中没有匹配的行,那么为空值select * from student st right outer join score sc on st.id=sc.id /右外联接:结果包括右表的一切行,假设右表

32、的行在左表中没有匹配的行,那么为空值select * from student st full join score sc on st.id=sc.id /完全外联接:前往左表和右表中的一切行left outer join / right outer join/full outer join/ /前往内联接的结果以及存在左/右表中, 而另一个表没有相应行的一切行.(同内联接有on 条件子句.) Left时,尽能够多前往第一个表的行,right时尽能够前往第二个表的行.完全外联接 在where子句后面用带括号的加号(+)表示. 无join 和 on子句.select cxdx.cxdx_dm,c

33、xdx_mc,zbmc,tjzd.cxzb_dm,tjzd.tjfrom dsdm.dm_zhcx_cxdx cxdx , dsdm.dm_zhcx_tjzd tjzdwhere cxdx.cxdx_dm = tjzd.cxdx_dm (+)and cxdx.cxdx_dm between 10 and 12一种说法是+ 号的另一侧的列可以为空(P37,Oracle9i JDBC 编程).Conn IC/IC ;select NVL(t1.id,99099) AS ID1,NVL(,I am NULL) AS name1, t1.p6s3, NVL(,I am NU

34、LL) AS name2, NVL(t2.id,99900) ID2 , t2.salary from temp t2 , tmp t1 where (+) = ;这里以为 可以为空. 但结果包含了部分为空的记录.下面的更加直接.select NVL(t1.id,99099) AS ID1,NVL(,I am NULL) AS name1, t1.p6s3, NVL(,I am NULL) AS name2, NVL(t2.id,99900) ID2 , t2.salary from temp t2 , t

35、mp t1 where = OR is null and is NOT NULL留意 AND 的优先级高于 OR自联接 某些表可以拥有自援用外键,一个列是其所在表的主键的一个外键.这时需求运用表别名消除模糊:select e1.last_name “Employee e2.last_name “Report Tofrom employees e1 left outer join employees e2 on e1.manager_id = e2.employee_idorder by e1.employee_id 不想用联接 ?

36、直接查询两个表SQL select a.CXZB_DM,a.CXZB_MC,b.CXDX_DM from DSDM.DM_ZHCX_CXZB a, DSDM.dm_zhcx_tjzd b where CXZB_LX=2 and a.CXZB_DM = b.CXZB_DM ;/ 把where字句的=改为*= 或者=* 就表示左/右外联接集合操作不允许运用order, 不能在BLOB, Long 这样的大数据对象上运用集合操作.各个单独的Select表的数量和数据类型必需完全一样.UNION取第一个查询的一切行与第二个查询的一切行的并集.Select employee_id, last_name

37、from employees where last_name like A% or last_name like B%UNIONSelect employee_id, last_name from employees where last_name like B% or last_name like C%将前往last_name以A , B 或C开头的所以employee_id , last_name行UNION ALL取两次查询的和,而不消除反复的行. A B B C 开头的,留意B两次出现.INTERSECT取两次的交集. 即B开头MINUS取在第一次前往而第二此不前往的结果. 即 A 开

38、头Table(表)Table DDL,Constraint建立表create table schema. ( default , default . );约束语法alter table schema. add constraint 创建表时的语法:constraint 主键 constraint cs_name primary key(columun_name) 任一表最多一个主键, 可以由一个或者多个列(max=32)共同构成一个主键. 表中恣意两行的主键列的值不能为NULL也不能一样.独一性 constraint cs_name unique(columun_name)最多由32列构成,多

39、个列即为复合独一键, 独一键约束允许多个NULL.独一键建立后, oracle会在后台建立一个独一性索引来强迫独一性.假设曾经为独一键建立了索引, oracle会运用已有的索引.外 键 constraint cs_name foreign key(columun_name) references parent_table_name(columun_name) 被参照的父表列为独一键或者主键,子表插入记录时可以为空. 外键可以自参照. 也可组合多个列成为复合外键(此时,复合外键所拥有的子表列要与父表列的数量类型都匹配). 当插入一行,外键不为空而父表中被参照的列没有相应的行, 那么插入失败. 外

40、键本身不要求非空.alter table insert_Select add constraint fk_ insert_Select foreign key (word) references enstudy(word) ;Check约束 constraint cs_name check(sex in ( MALE, FEMALE)建立有约束的表create table significant_Others( customer_number int not null primary key, significant_other int, information NVARCHAR2(15) ,

41、 foreign key (information) references enstudy) ;/ enstudy 必需有主键,而且主键为NVARCHAR2(15).create table CONSTRAINTS2( ID1 VARCHAR2(10) not null, ID2 VARCHAR2(10) not null, NAME VARCHAR2(20), SEX VARCHAR2(1), constraint pk_constraints2 primary key(id1,id2)create table as select wherecreate table insert_Selec

42、t2 as select word, pronounce from enstudy ;查询一个表以创建另一个表, 这里支持对象(如 约束/索引/触发器) 将不会被建立.运用where 1=0 可以只复制构造. 删除约束alter table enstudy drop constraint pk ;/ERROR 位于第 1 行:ORA-02273: 此独一/主键已被某些外部关键字援用创建视图create view cor_View as select word as WORD_Se, pronounce as PRO from enstudy ;由于视图是一个指定的查询结果集, 所以可以运用符合

43、查询或者嵌套,JOIN,UNION对视图的改动将反映到原始表 !DML (Data Manipulation language)INSERT 插入一行Insert into (,.) Values(,) ;insert into select . . from whereinsert into copy_tab Select word , pronounce from enstudy where word=able ;UPDATE 修正行Update employees Set salary = salary * 1.15Where job_id=IT_PROG ;DELETEDelete f

44、rom employees where job_id = IT_PROG ;这里不限运用一个条件,假设不提供条件那么会删除表的一切记录.COMMIT一旦提交就不能回滚回到前面的形状.ROLLBACK 回滚到最近一次commit或者rollback后的形状.全局暂时表create global temporary table session_tabon commit preserve rowsas select *from employeescreate global temporary table teansaction_tabon commit delete rows as select *

45、 from employeeswhere 1=0修正表构造添加一列 addalter table people add( cell_number varchar2(10) ) ;修正一列 Modify/NOT NULL 约束Alter table peopleModify ( ssn number(9) not null) ;删除列 标注不用的列alter table Drop cloumn alter table Drop cloumn (cloumn1,column2.)/上面语句将重写表到磁盘,并移走旧的数据./下面将不重写也不收回空间,对于大表将节约时间.Alter table set

46、 unused columnAlter table set unused (column,column2)/下面删除unused列alter table DROP UNUSED COLUMN/查找不用的列select * from user_unused_col_tabs ; / 前往两列(table_name, count)重命名表alter table people rename to employee删除表drop table cascade constraints可选参数选中后将同时删除子表外键.TRUNCATE TABLE 去除数据,保管表TRUNCATE TABLE SCHEMA.

47、 DROP STORAGE | REUSE STORAGE / 快速去除表中的数据,保管表,且不会生成回滚数据.不会激活ON DELETE 触发器必需先禁用所以子表外键,必需具有DROP TABLE 特权, 是一个DDL语句,所以不能回滚.DROP STORAGE: 默许选项.只需最初为表分配的盘区(MINEXTENTS)会被保管给新行.REUSE STORAGE:保管表的一切盘区, 适宜快速增长的表.View(视图) (省略了很多细节)关系视图建立视图create view my_v asselect first_name|, |last_name NAME from HR.employee

48、s ; -重命名是必需的,当运用列衔接时.- Group by , order by , having 子句是允许的. 也允许Union两个查询.我需求什么权限 ?需求有视图所援用的表的选择的权限.需求有创建视图的权限:grant create any view to IC ; - user IC 具有了创建视图的权限视图的作用 ?把复杂的查询定义在可重用视图中, 可以隐藏查询的担任性,限制查询的前往, 比如定义视图时不选择薪资字段, 再把视图的选择权授予public, 而收回表的选择权, 可以限制表数据的前往, 也可以在视图的查询中添加WHERE子句, 限制行的前往,经过赋予视图的SELEC

49、T权限更加有效的维护表中的数据.可以建立同义词create public synonym table_name for user1.table_name;有哪些视图 ?select view_name from user_views ;视图的原始定义select view_name, text from user_views ;改动视图create or replace view ms_v as select * from ms ;- 不会损失以前授予对视图操作的特权 删除视图drop view 编译视图compilealter view view_t compile ; -视图无效后, 手工

50、编译视图建立强迫视图forcecreate or replace force view golf as select * from iAmNoExsit ;警告: 创建的视图带有编译错误。视图的哪些列是可更新的? 查数据词典user_updatable_columnsdesc user_updatable_columns称号 能否为空? 类型 OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) COLUMN_NAME NOT NULL VARCHAR2(30) UPDATABLE VARCHAR2(3) INSERTABLE

51、 VARCHAR2(3) DELETABLE VARCHAR2(3)select * from user_updatable_columns where table_name =COMPANY_PHONE_BOOK;WITH READ ONLY 建立只读视图create or replace force view golf as select * from iAmNoExsit WITH READ ONLY;- 使得视图只读, 防止用户经过视图改动了表数据.经过视图更新数据普通直接从数据表中选择的列可以直接更新, 但一些衔接( |)成的虚拟列或者统计列不能直接更新, 此时可以思索在视图上建立I

52、NSTEAD OF 触发器.WITH CHECK OPTION 约束create or replace view friend as select * from workMess where ID=9 with check option ;由于加上了约束, 那么当DML数据时, 只需那些能被视图选中的数据才允许插入或者更新.update friend set id=10 ;update friend set id=10 *ERROR 位于第 1 行:ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句但是, 此时运用where id=9条件使得照常可以更新.i

53、nsert into friend (id) values(11) ;insert into friend (id) values(11) *ERROR 位于第 1 行:ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句delete friend ;已删除 1 行。内嵌视图内嵌视图根本上就是嵌入到父查询中的查询, 可以在任何可以运用表的地方运用. 内嵌视图是暂时的,它只存在于父查询的运转期间, 但是它可以让他在整个查询的任何部分运用视图结果.什么样子的select department_name,count(*), TO_CHAR(count(*)/tota

54、l_empt)*100,90.99)|% pct from hr.departments dep, hr.employees emp, ( select count(*) cnt from hr.employees ) total_emp where dep.department_id = emp.department_id group by department_name, total_empttotal_emp 成为内嵌视图select count(*) cnt from hr.employees 的别名.类似select department_name,count(*), TO_CHAR

55、(count(*)/( select count(*) from hr.employees ) )*100,90.99)|% pct from hr.departments dep, hr.employees emp where dep.department_id = emp.department_id group by department_nameROWNUM有用吗?ROWNUM 是一个反映了从表选取行的次序的伪列, 所要选取的第一行ROWNUM值为1, 第二行的rownum为2,后面的行依次类推。但是, ROWNUM值会在用ORDER BY子句之前就指定给了每个行.内嵌视图使ROWNUM

56、真正有用:select last_name, hire_date from (select last_name, hire_date from hr.employees order by hire_date )where rownum=2 and afterOrderResultNo=3select * from ( select id,ro r from(select id, row_number()over(order by id desc) ro from rownumtest ) )where r between 1000 and 1020 ; 数据词典视图常见的视图(省略了很多细节)

57、数据词典数据词典是用户在整个ORACLE数据库的编目, 当建立用户,表, 约束 和 其他数据库对象时, ORACLE都会自动维护一个在数据库中存储的项编目. 用户经过数据词典可以知道:所拥有的表的称号和特性有权查看的一切表的称号和属性检索存储过程的代码特定表空间中存储的一切数据文件罗列依赖于其他对象的对象.dictionary 保管了数据词典中一切视图的完好列表和简短描画.table_name : 称号comments : 文本注释DICt_COLUMNS词典表中的列描画:table_name : 称号column_name : 列名comments : 列的文本注释DBA_objects数据

58、库中一切对象的列表和相关内容dba_tables数据库中一切表的列表和相关内容dba_tab_columns表的一切列, 视图, 簇的信息dba_tab_privs赋予数据库中对象上的特权信息dba_col_privs数据库特定列上一切特权dba_tab_comments/dba_col_comments表和视图上建立的注释dba_constraints表上的约束信息dba_cons_columns数据库表上约束的列的信息信息dba_external_tables外部表的信息dba_external_locations外部表的数据位置信息dba_object_tables对象表的信息dba_c

59、oll_types一切类集类型的相关信息dba_jobs一切排定作业的相关信息dba_types一切对象类型的信息dba_type_attrs对象类型属性的信息dba_type_methods对象类型中方法的信息dba_method_params对象类型方法的参数信息dba_method_results调用者可以运用的方法前往类型信息dba_lobs一切大对象或者lobdba_views一切视图的信息dba_updatable_columns联接视图的一切列,以及能否可以经过他们修正数据dba_triggers一切与触发器相关的信息dba_trigger_cols触发器的一切列的信息dba_s

60、ource实践的PL/SQL源代码dba_procedures过程和函数的信息all_arguments过程和函数的参数和前往值的信息dba_dependencies对象之间的依赖信息dba_errorsshow errors将查询的视图, 前往最近一次的错误信息dba_indexes索引的相关信息dba_ind_columns索引的列的信息dba_roles角色信息dba_role_privs数据库的用户或者角色 被 赋予了何种角色的信息dba_sys_privs数据库的用户或者角色 被 赋予了何种系统特权dba_directories所建立的目录对象的信息global_name只需一行,一

温馨提示

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

评论

0/150

提交评论