oracle视图总结

合集下载

oracle数据库中的表与视图

oracle数据库中的表与视图

oracle数据库中的表与视图Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。

对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。

表和视图Oracle中表是数据存储的基本结构。

ORACLE8引入了分区表和对象表,ORACLE8i 引入了临时表,使表的功能更强大。

视图是一个或多个表中数据的逻辑表达式。

本文我们将讨论怎样创建和管理简单的表和视图。

管理表表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构。

用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。

例如:CREATE TABLE products( PROD_ID NUMBER(4),PROD_NAME VAECHAR2(20),STOCK_QTY NUMBER(5,3));这样我们就建立了一个名为products的表,关键词CREATE TABLE后紧跟的表名,然后定义了三列,同时规定了列的数据类型和大小。

在创建表的同时你可以规定表的完整性约束,也可以规定列的完整性约束,在列上普通的约束是NOT NULL,关于约束的讨论我们在以后进行。

在建立或更改表时,可以给表一个缺省值。

缺省值是在增加行时,增加的数据行中某一项值为null时,oracle即认为该值为缺省值。

下列数据字典视图提供表和表的列的信息:. DBA_TABLES. DBA_ALL_TABLES. USER_TABLES. USER_ALL_TABLES. ALL_TABLES. ALL_ALL_TABLES. DBA_TAB_COLUMNS. USER_TAB_COLUMNS. ALL_TAB_COLUMNS表的命名规则表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。

表名应该以字母开始,可以在表名中包含数字、下划线、#、$等。

Oracle物化视图详解

Oracle物化视图详解

物化视图详解物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图可以查询表,视图和其它的物化视图。

一、关于物化视图日志:查询物化视图日志文件格式:desc mlog$_lzwmvtest;创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错Demo:对一个表test创建日志:create materialized view log on test;那么会报:表'LZWMVTEST'不包含主键约束条件这种情况下,就必须指定日志文件结构比如:create materialized view log on test with rowid(具体的针对日志内容方面的在另外一个专题里说明,这里就简述到此)二、关于生成数据和刷新:1>生成数据两大选项:build immediate build deferredBuild immediate:在创建物化视图的同时根据主表生成数据Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2>关于刷新²刷新方式:complete fast forceComplete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新ØFast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)ØForce:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)²刷新时间:on demand on commit start with/ nextOn demand:在需要刷新时进行刷新(人工判断)On commit:在基表上有提交操作时,进行更新Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)Next:刷新的周期时间三、基于主键的物化视图和ROWID的物化视图的说明创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

Oracle第6章视图和索引操作

Oracle第6章视图和索引操作


量(g_Number)信息,可以创建一个“热点”商品的视

图。


CREATE OR REPLACE VIEW SCOTT.vw_HotGoods

AS

SELECT g_ID AS 商品号, g_Name AS 商品名称, t_ID
AS 类别号, g_Price AS 价格, g_Discount
案例完成步骤
(6)强制创建视图
正常情况下,如果基表不存在,创建视图就会失败。但是可
以使用FORCE选项强制创建视图(前提是创建视图的语句
没有语法错误),但此时该视图处于失效状态。

【例2-6】创建并验证基于Test表的强制视图
师 演
(a)在Test表不存在的情况下,创建基于该表的强制视图

vw_TestForce。

重定义时没有使用该选项,则以前的此选项将自动删除。

2.使用PL/SQL修改视图

(1)重命名视图
【例2-7】重命名用户方案SCOTT的视图
vw_MaxPriceGoods为vw_MaxPrice。
rename vw_MaxPriceGoods TO vw_MaxPrice;
Oracle数据库管理与应用实例教程


图。

CREATE OR REPLACE VIEW


SCOTT.vw_MaxPriceGoods
AS
SELECT t_ID, Max(g_Price) AS MaxPrice
FROM SCOTT.Goods
GROUP BY t_ID
Oracle数据库管理与应用实例教程

Oracle的视图详解

Oracle的视图详解

1.视图的概述视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。

视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。

视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。

(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)2.视图的存储与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。

视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。

由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。

3.视图的作用用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。

视图常见的用途如下:通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制隐藏数据复杂性视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。

此视图就对用户隐藏了数据来源于多个表的事实。

简化用户的SQL 语句用户使用视图就可从多个表中查询信息,而无需了解这些表是如何连接的。

以不同的角度来显示基表中的数据视图的列名可以被任意改变,而不会影响此视图的基表使应用程序不会受基表定义改变的影响在一个视图的定义中查询了一个包含4 个数据列的基表中的3 列。

当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。

保存复杂查询一个查询可能会对表数据进行复杂的计算。

用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。

逻辑数据独立性视图可以使应用程序和数据库表在一定程度上独立。

如果没有视图,应用一定是建立在表上的。

有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

4.视图的工作机制视图的定义就是其使用的查询语句,Oracle 将这个定义以文本形式存储在数据字典中。

oracle视图原理

oracle视图原理

oracle视图原理Oracle视图是一个虚拟的表,它是由查询语句定义的。

视图本身并不包含数据,而是在查询时动态地从基本表或其他视图中检索数据。

视图是对基本表的引用,它对数据进行了封装和分组,以提供一个更简洁和可读性更高的数据展示方式。

视图的创建是通过SELECT语句来实现的,它可以从一个或多个表中选择列,并根据需要对这些列进行过滤、排序和分组等操作。

创建视图的语法如下:CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;创建视图后,可以像操作普通表一样使用视图进行查询和连接操作。

视图的查询会自动基于视图定义的查询语句执行,从而返回相关的结果。

由于视图只是一个虚拟的表,并不存储数据,因此查询时不会对视图本身进行修改。

除了查询操作,视图还可以用于数据更新。

通过视图对基本表进行增删改操作,可以对底层的数据进行更新,同时保持视图的一致性。

但是需要注意的是,不是所有的视图都可以进行数据更新操作,只有满足一定条件的视图才可以进行更新。

视图的优点是可以将复杂的查询语句封装为简单的视图,提高查询效率和代码复用性。

它还可以对数据进行保护,限制用户只能查看和修改部分数据,提高数据安全性。

此外,视图还可以隐藏底层表结构的变化,提供一种抽象层,使应用程序与数据库之间的耦合度降低。

总之,Oracle视图是一个虚拟的表,它封装了基本表或其他视图的数据,并提供简洁和可读性高的数据展示方式。

通过视图可以进行查询和连接操作,并且还能用于数据更新和保护。

视图的创建是通过SELECT语句实现的,查询时将自动基于视图定义的查询语句执行。

oracle系统视图大全

oracle系统视图大全

DBA_2PC_NEIGHBORS 包含待处理事务进入连接和退出连接信息。

DBA_2PC_PENDING 包含等待恢复的分布式事务的信息。

DBA_ALL_TABLES 显示数据库中所有表(对象表和关系表)的描述。

DBA_ANALYZE_OBJECTS 列出分析对象。

DBA_ASSOCIATIONS 列出用户定义的统计信息。

DBA_AUDIT_EXISTS 列出由AUDIT NOT EXISTS(不存在审计)和AUDIT EXISTS(存在审DBA_AUDIT_OBJECT 包含系统中所有对象的审计跟踪记录。

DBA_AUDIT_SESSION 列出关于CONNECT(连接)和DISCONNECT(断开连接)的所有审讯跟踪记录。

DBA_AUDIT_STATEMENT 列出关于GRANT(授权)、REVOKE(取消)、AUDIT〔审计〕、NOAUDIT(不审计)和ALTER SYSTEM(改变系统)语句的审记跟踪记录。

DBA_AUDIT_TRAIL列出所有的审记跟踪条目。

DBA_BLOCKERS列出所有人等待一个会话持有的锁的所有会话,但并非它们自己在等待一个锁。

DBA_CATALOG 列出所有数据库表、视图、同义词和序列。

DBA_CLU_COLUMNS 列出表列到簇列的映射。

DBA_CLUSTER_HASH_expression_rS列出所有簇的散列(hash)函数。

DBA_CLUSTERS 包含数据库中所有族的描述。

DBA_COL_COMMENS 列出所有表和视图列的注解。

DBA_COL_PRIVS 列出数据库中授予列的所有权限。

DBA_COLL_TYPES 显示数据库中所有命名的集合类型,如VARRAY(数组)、嵌套表、对象表,等等;DBA_CONS_COLUMNS 包含在约束定义中的,可访问的列的信息DBA_CONSTRAINTS 包含所有表上的约束定义。

DBA_CONTEXT 列出所有上下文名字空间的信息。

Oracle数据库的视图

Oracle数据库的视图

Oracle数据库的视图使⽤视图的优点:1.简化数据操作:视图可以简化⽤户处理数据的⽅式。

2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。

3.视图提供了⼀个简单⽽有效的安全机制,可以定制不同⽤户对数据的访问权限。

4.提供向后兼容性:视图使⽤户能够在表的架构更改时为表创建向后兼容接⼝。

创建或修改视图语法CREATE [OR REPLACE] [FORCE] VIEW view_nameAS subquery[WITH CHECK OPTION ][WITH READ ONLY]OR REPLACE :若所创建的试图已经存在,ORACLE ⾃动重建该视图;FORCE :不管基表是否存在 ORACLE 都会⾃动创建该视图;subquery :⼀条完整的 SELECT 语句,可以在该语句中定义别名;WITH CHECK OPTION :插⼊或修改的数据⾏必须满⾜视图定义的约束;WITH READ ONLY :该视图上不能进⾏任何 DML 操作。

删除视图语法DROP VIEW view_name键保留表是理解连接视图修改限制的⼀个基本概念。

该表的主键列全部显⽰在视图中,并且它们的值在视图中都是唯⼀且⾮空的。

也就是说,表的键值在⼀个连接视图中也是键值,那么就称这个表为键保留表。

物化视图:创建物化视图语法、CREATE METERIALIZED VIEW view_name[BUILD IMMEDIATE | BUILD DEFERRED ]REFRESH [FAST|COMPLETE|FORCE][ ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT(next_time) ] ASsubqueryBUILD IMMEDIATE 是在创建物化视图的时候就⽣成数据BUILD DEFERRED 则在创建时不⽣成数据,以后根据需要再⽣成数据。

默认为 BUILD IMMEDIATE。

oracle物化视图详解

oracle物化视图详解

一.物化视图概述Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。

物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

物化视图由于是物理真实存在的,故可以创建索引。

1.1 物化视图可以分为以下三种类型包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:(1)创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

BUILD IMMEDIATE是在创建物化视图的时候就生成数据。

BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。

默认为BUILD IMMEDIATE。

(2)查询重写(QueryRewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE 两种。

oracle视图(带参数)

oracle视图(带参数)

具体的Oracle参数视图实践(1)2010-04-19 10:20 佚名 CSDN博客字号: |一般情况下Oracle数据库是不带参数的视图。

有时,我们想使用Oracle参数视图,可以给我们方便查询数据。

下面就来简单介绍下。

AD:一般情况下Oracle数据库是不带参数的视图。

有时,我们想使用Oracle参数视图,可以给我们方便查询数据。

比如,眼下我面对这这样一个问题:要打印一张报表,报表的数据源是Oracle视图。

现在,随着数据量的增大,打印报表的速度越来越慢了。

所以首先想到了如何优化视图,视图的基表为3张表,表A几百条数据,表B大约3万条数据,表C大约60万条数据,其中表C每月大约增加3万条数据,视图的SCRIPTS大概是这个样子:1.CREATE OR REPLACE VIEW M_VIEW2.(COL1,COL2,COL3)3.AS4.SELECT COL1,COL2,COL3 FROM A,B,C WHERE =GET_A_NAME(B.ID) ANDB.ID =C.ID;其中,GET_A_NAME()为已定义好的根据B表ID查询其对应的A表NAME的方法。

各基表中都已建立了索引,考虑到打印报表时值需要指定月份的数据,所以,想到能不能在视图中限定C.TIME=指定的时间,这样数据量就会大大下降,只需要C表中大约3万条数据。

但是,问题是,Oracle中视图是不能带参数的。

有问题,就有办法,用变通的办法,看招:方案1:利用全局变量。

用全局变量做什么?改一下Oracle参数视图:1.CREATE OR REPLACE VIEW M_VIEW2.(COL1,COL2,COL3)3.AS4.SELECT COL1,COL2,COL3 FROM A,B,C WHERE =GET_A_NAME(B.ID) ANDB.ID =C.ID AND C.TIME=全局变量;全局变量中保存查询的时间条件,在每次调用查询视图之前,先修改全局变量的值,然后查询视图时就会按照指定条件筛选数据。

Oracle 管理视图

Oracle  管理视图

Oracle 管理视图在创建视图后,用户还可以对视图进行管理,主要包括:查看视图的定义信息、修改视图定义、重新编译视图和删除视图。

1.查看视图定义前面介绍过,数据库并不存储视图中的数值,而是存储视图的定义信息。

用户可以通过查询数据字典视图USER_VIEWS,以获得视图的定义信息。

数据字典视图为USER_VIEWS 的结构如下:SQL> desc user_views名称是否为空? 类型----------------------------------------- -------- ----------------VIEW_NAME NOT NULL V ARCHAR2(30)TEXT_LENGTH NUMBERTEXT LONGTYPE_TEXT_LENGTH NUMBERTYPE_TEXT V ARCHAR2(4000)OID_TEXT_LENGTH NUMBEROID_TEXT V ARCHAR2(4000)VIEW_TYPE_OWNER V ARCHAR2(30)VIEW_TYPE V ARCHAR2(30)SUPERVIEW_NAME V ARCHAR2(30)EDITIONING_VIEW V ARCHAR2(1)READ_ONLY V ARCHAR2(1)在USER_VIEWS视图中,TEXT列存储了用户视图的定义信息,即构成视图的SELECT 语句。

SQL> select text2 from user_views3 where view_name=upper('employees_admin_view');TEXT-------------------------------------------------------------------select employee_id,last_name,email,hire_date,job_id,salaryfrom hr.employees_copy2.修改视图定义建立视图后,如果要改变视图所对应的子查询语句,则可以执行CREATE OR REPLACE VIEW语句。

Oracle视图概念

Oracle视图概念

Oracle视图概念
什么事视图
视图也是一种数据库对象,英文叫做“view”。

视图的本义就是与客户交互的窗口。

简单理解有点象一个容器,窗口中只能存放一条查询语句。

当“select * from 视图名“,其实执行的是容器中的查询语句。

所以查询视图也可以得到数据,不过这些数据都是经过查询语句“加工”以后的数据,可能与原表的记录完全不同。

使用视图有什么好处
1、数据访问控制。

注意视图也是一个数据库对象。

如果限制用户只能通过视图访问数据,那么就可能限制用户访问指定的数据,而不是数据库中的原始数据。

2、简单复杂SQL的调用。

有些一条SQL可能有好多行,通常都是一些报表。

直接在JAVA或C程序调用并不方便,此时就可以创建一个视图,然后就用一句简单的“select * from 视图名”就可以了。

3、实现相同查询语句的复用。

下面讲一个需要统计数据出口的案例。

假设大多数的业务都只针对本公司没有离职的员工,每次查询员工时都需要加上条件“where 离职状态=0”,不方便,也容易因为忘记加上条件而导致出错。

所以就可以建立一个视图,这些业务每次查询要处理的员工时,都从视图中查询。

当需求改变时,如需要根据出生日期显示员工年龄,也只需要改动视图一处。

KK-ORACLE系统视图详解

KK-ORACLE系统视图详解
DBA_LIBRARIES 列出数据库中所有的库。
DBA_LOB_PARTITIONS 显示包含在表中的用户可访问的LOB。
DBA_LOB_SUBPARTITIONS 显示LOB数据子分区中的分区级属性。
DBA_LOBS 显示包含在所有表中的LOB.
DBA_LOCK_INTERNAL 包含每个被持有的锁或简易锁的一行信息,及锁或简易锁的每一个未决定请求的一行信息。
DBA_LOCKS 列出数据库中持有的所有锁或简易锁,及一个锁或简易锁的所有未决请求。
DBA_METHOD_PARAMS 包含数据库中类型的方法参数的描述。
DBA_METHOD_RESULTS 包含数据库中所有类型的方法结果的描述。
DBA_MVIEW_AGGREGATES 代表在聚集实例化视图的SELECT列表中出现的分组函数(聚集方法)。
DBA_AUDIT_TRAIL 列出所有的审记跟踪条目。
DBA_BLOCKERS 列出所有人等待一个会话持有的锁的所有会话,但并非它们自己在等待一个锁。
DBA_CATALOG 列出所有数据库表、视图、同义词和序列。
DBA_CLU_COLUMNS 列出表列到簇列的映射。
DBA_CLUSTER_HASH_EXPRESSIONS 列出所有簇的散列(hash)函数。
DBA_PART_HISTOGRAMS 包含所有表分区上直方图的直方图数据(每个直方图的端点)。
DBA_PART_INDEXES 列出所有分区索引的对象级分区信息。
DBA_PART_KEY_COLUMNS 描述所有分区对象的分区关键字列。
DBA_PART_LOBS 描述分区LOB的表级信息,包括LOB数据分区的缺省属性。

oracle-----视图物化视图

oracle-----视图物化视图

oracle-----视图物化视图什么是视图视图(view),也称虚表, 不占⽤物理空间,这个也是相对概念,因为视图本⾝的定义语句还是要存储在数据字典⾥的。

视图只有逻辑定义。

每次使⽤的时候,只是重新执⾏SQL。

视图是从⼀个或多个实际表中获得的,这些表的数据存放在数据库中。

那些⽤于产⽣视图的表叫做该视图的基表。

⼀个视图也可以从另⼀个视图中产⽣。

视图的定义存在数据库中,与此定义相关的数据并没有再存⼀份于数据库中。

通过视图看到的数据存放在基表中。

视图看上去⾮常象数据库的物理表,对它的操作同任何其它的表⼀样。

当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会⾃动反映在由基表产⽣的视图中。

由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

还有⼀种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照(8i 以前的说法),它是含有数据的,占⽤存储空间。

视图的作⽤1)提供各种数据表现形式, 可以使⽤各种不同的⽅式将基表的数据展现在⽤户⾯前, 以便符合⽤户的使⽤习惯(主要⼿段: 使⽤别名);2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句⼀般是⽐较复杂的, ⽽且⽤户需要了解表之间的关系, 否则容易写错; 如果基于这样的查询语句创建⼀个视图, ⽤户就可以直接对这个视图进⾏"简单查询"⽽获得结果. 这样就隐藏了数据的复杂性并简化了查询语句.这也是oracle提供各种"数据字典视图"的原因之⼀,all_constraints就是⼀个含有2个⼦查询并连接了9个表的视图(在catalog.sql中定义);3)执⾏某些必须使⽤视图的查询. 某些查询必须借助视图的帮助才能完成. ⽐如, 有些查询需要连接⼀个分组统计后的表和另⼀表, 这时就可以先基于分组统计的结果创建⼀个视图, 然后在查询中连接这个视图和另⼀个表就可以了;4)提供某些安全性保证. 视图提供了⼀种可以控制的⽅式, 即可以让不同的⽤户看见不同的列, ⽽不允许访问那些敏感的列, 这样就可以保证敏感数据不被⽤户看见;5)简化⽤户权限的管理. 可以将视图的权限授予⽤户, ⽽不必将基表中某些列的权限授予⽤户, 这样就简化了⽤户权限的定义。

ORACLE sid,pid,spid总结

ORACLE sid,pid,spid总结

概念上:1.spid (system process id) 是操作系统层面的进程id .2.pid(process id) 这个是基于oracle的进程id个人理解为就是oracle给自己的进程的一个编号。

3.sid.(这个就是session 的id) 这个个人理解为,就是有人在同oracle连接会话,oracle为其分配的一个编号。

长用于连接其他列。

说道这还的和几个动态性能视图联系起来。

1.v$process视图此视图包含当前系统中oracle的所有的进程信息,常被用于将oracle或服务进程的操作系统进程ID与数据库session之间建立联系。

常用列:ADDR:进程对象地址PID:oracle进程IDSPID:操作系统进程IDV$PROCESS中的连接列 ADDR 通常與V$SESSION PADDR相連接。

如:select p.addr,P.PID,P.PID, s.paddr from v$process p,v$session s where P.ADDR=S.PADDR2.v$session视图V$SESSION是基础信息视图,用于找寻用户SID或SADDR。

不过,它也有一些列会动态的变化,可用于检查用户。

常用列:SID:SESSION标识,常用于连接其它列。

SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个SESSION结束,另一个SESSION开始并使用了同一个SID)。

AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式USERNAME:当前session在oracle中的用户名。

STATUS:这列用来判断session状态是:Achtive:正执行SQL语句(waiting for/using a resource)Inactive:等待操作(即等待需要执行的SQL语句)Killed:被标注为删除paddr, process addr, 通过这个字段我们可以查看当前进程的相关信息, 系统进程id,操作系统用户信息等等.(sql_address,sql_hash_value)(prev_sql_addr,prev_hash_value) 根据这两组字段, 我们可以查询到当前session正在执行的sql语句的详细3.v$sqltext视图此视图包括共享池(share poll)中sql语句的完整文本,一条sql语句可能被分成多个快被保存。

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理

oracle系统视图SQL语句整理-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝⼤部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表。

-- ALL_TABLES意为某⼀⽤户拥有的或可以访问的所有的关系表。

-- USER_TABLES意为某⼀⽤户所拥有的所有的关系表。

-- 当某⼀⽤户本⾝就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。

-- DBA_TABLES >= ALL_TABLES >= USER_TABLES-- 需要注意的是在ORACLE数据库中⼤⼩写是敏感的,⽽此三表中数据默认都是⼤写的,所以在进⾏查询的时候注意⼩写的数据可能会造成数据⽆法查到。

SELECT * FROM dba_views WHERE view_name LIKE 'DBA%';SELECT * FROM dba_views WHERE view_name LIKE 'ALL%';SELECT * FROM dba_views WHERE view_name LIKE 'USER%';SELECT * FROM dba_views WHERE view_name LIKE 'V_$%'; -- 针对某个实例的视图SELECT * FROM dba_views WHERE view_name LIKE 'GV_$%'; -- 全局视图,针对多个实例环境SELECT * FROM dba_views WHERE view_name LIKE 'SESSION%';SELECT * FROM dba_views WHERE view_name LIKE 'INDEX%';SELECT count(1) FROM dba_tables;SELECT count(1) FROM all_tables;SELECT count(1) FROM user_tables;-- V$/GV$开头的绝⼤部分都是V_$/GV_$表的别名SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'V$%';SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'GV$%';-- X$没有对应的X_$SELECT * FROM dba_synonyms WHERE synonym_name LIKE 'X$%';-- ⽐较常⽤的DBA开头的视图有select * from dba_users; --数据库⽤户信息select * from dba_roles; --⾓⾊信息select * from dba_segments; --表段信息select * from dba_extents; --数据区信息select * from dba_objects; --数据库对象信息select * from dba_lobs; --lob数据信息select * from dba_tablespaces; --数据库表空间信息select * from dba_data_files; --数据⽂件设置信息select * from dba_temp_files; --临时数据⽂件信息select * from dba_rollback_segs; --回滚段信息select * from dba_ts_quotas; --⽤户表空间配额信息select * from dba_free_space; --数据库空闲空间信息select * from dba_profiles; --数据库⽤户资源限制信息select * from dba_sys_privs; --⽤户的系统权限信息select * from dba_tab_privs; --⽤户具有的对象权限信息select * from dba_col_privs; --⽤户具有的列对象权限信息select * from dba_role_privs; --⽤户具有的⾓⾊信息select * from dba_audit_trail; --审计跟踪记录信息select * from dba_stmt_audit_opts; --审计设置信息select * from dba_audit_object; --对象审计结果信息select * from dba_audit_session; --会话审计结果信息select * from dba_indexes; --⽤户模式的索引信息-- ⽐较常⽤的ALL开头的视图有select * from all_users; --数据库所有⽤户的信息select * from all_objects; --数据库所有的对象的信息select * from all_def_audit_opts; --所有默认的审计设置信息select * from all_tables; --所有的表对象信息select * from all_indexes; --所有的数据库对象索引的信息select * from all_tab_comments; --查询所有⽤户的表,视图等select * from all_col_comments; --查询所有⽤户的表的列名和注释.select * from all_tab_columns; --查询所有⽤户的表的列名等信息(详细但是没有备注)-- ⽐较常⽤的ALL开头的视图有select * from user_objects; --⽤户对象信息select * from user_source; --数据库⽤户的所有资源对象信息select * from user_segments; --⽤户的表段信息select * from user_tables; --⽤户的表对象信息select * from user_tab_columns; --⽤户的表列信息select * from user_constraints; --⽤户的对象约束信息select * from user_sys_privs; --当前⽤户的系统权限信息select * from user_tab_privs; --当前⽤户的对象权限信息select * from user_col_privs; --当前⽤户的表列权限信息select * from user_col_comments; -- 查询本⽤户的表的列名和注释select * from user_role_privs; --当前⽤户的⾓⾊权限信息select * from user_indexes; --⽤户的索引信息select * from user_ind_columns; --⽤户的索引对应的表列信息select * from user_cons_columns; --⽤户的约束对应的表列信息select * from user_clusters; --⽤户的所有簇信息select * from user_clu_columns; --⽤户的簇所包含的内容信息select * from user_cluster_hash_expressions; --散列簇的信息-- ⽐较常⽤的V$开头的别名有select * from v$database; --数据库信息select * from v$datafile; --数据⽂件信息select * from v$controlfile; --控制⽂件信息select * from v$logfile; --重做⽇志信息select * from v$instance; --数据库实例信息select * from v$log; --⽇志组信息select * from v$loghist; --⽇志历史信息select * from v$sga; --数据库SGA信息select * from v$parameter; --初始化参数信息select * from v$process; --数据库服务器进程信息select * from v$bgprocess; --数据库后台进程信息select * from v$controlfile_record_section; --控制⽂件记载的各部分信息select * from v$thread; --线程信息select * from v$datafile_header; --数据⽂件头所记载的信息select * from v$archived_log; --归档⽇志信息select * from v$archive_dest; --归档⽇志的设置信息select * from v$logmnr_contents; --归档⽇志分析的DML DDL结果信息select * from v$logmnr_dictionary; --⽇志分析的字典⽂件信息select * from v$logmnr_logs; --⽇志分析的⽇志列表信息select * from v$tablespace; --表空间信息select * from v$tempfile; --临时⽂件信息select * from v$filestat; --数据⽂件的I/O统计信息select * from v$undostat; --Undo数据信息select * from v$rollname; --在线回滚段信息select * from v$session; --会话信息select * from v$transaction; --事务信息select * from v$rollstat; --回滚段统计信息select * from v$pwfile_users; --特权⽤户信息select * from v$sqlarea; --当前查询过的sql语句访问过的资源及相关的信息select * from v$sql; --与v$sqlarea基本相同的相关信息select * from v$sysstat; --数据库系统状态信息-- ⽐较常⽤的SESSION开头的视图有select * from session_roles; --会话的⾓⾊信息select * from session_privs; --会话的权限信息-- ⽐较常⽤的INDEX开头的视图有select * from index_stats; --索引的设置和存储信息-- 伪表,参考oracle 中 dual 详解:/ozhouhui/article/details/7935196select * from dual; --系统伪列表信息select sysdate from dual; --可将Sysdate视为⼀个其结果为当前⽇期和时间的函数,在任何可以使⽤Oracle函数的地⽅都可以使⽤Sysdate。

Oracle内置的表或视图

Oracle内置的表或视图

在ORACLE数据库中,有一些内置的表和视图,记录着一些数据库的相关信息:如我们建了哪些表,哪些用户,表有哪些字段等等,这些东西有时候是非常有用的。

1.几个重要的Oracle表或者视图如下:v$controlfile:控制文件的信息;v$datafile:数据文件的信息;v$log:日志文件的信息;v$process:处理器的信息;v$session:会话信息;v$transaction:事务信息;v$resource:资源信息;v$sga:系统全局区的信息。

上面的视图名中的‘v$’,只是视图名字中的字符。

类似于上面的视图或表还有很多,位于:$Oracle_HOME/RDBMS/ADMIN/CATALOG.SQL文件中。

这些视图或Oracle表可以在SQLPLUS中用SELECT语句进行查询。

2.数据字典视图表和列DBA_TABLES、ALL_TABLES和USER_TABLES显示了有关数据库表的一般信息。

DBA_TAB_COLUMNS、ALL_TAB_COLUMNS和USER_TAB_COLUMNS显示了每个数据库表的列的信息。

注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括Oracle 表。

完整性约束DBA_CONSTRAINTS、ALL_CONSTRAINTS和USER_CONSTRAINST显示有关约束的一般信息。

DBA_CONS_COLUMNS、ALL_CONS_COLUMNS和USER_CONS_COLUMNS显示有关列的相关约束的一般信息。

视图DBA_VIEWS、ALL_VIEWS和USER_VIEWS。

注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括视图。

序列DBA_SEQUENCES、ALL_SEQUENCES和USER_SEQUENCES。

注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括序列。

ORACLE分区表相关视图

ORACLE分区表相关视图

ORACLE分区表相关视图1. 显⽰当前⽤户可访问的所有分区表信息﹕
ALL_PART_TABLES
2. 显⽰当前⽤户所有分区表的信息﹕
USER_PART_TABLES
3. 显⽰表分区信息显⽰数据库所有分区表的详细分区信息﹕
DBA_TAB_PARTITIONS
4. 显⽰当前⽤户可访问的所有分区表的详细分区信息﹕
ALL_TAB_PARTITIONS (这是俺的福星O(∩_∩)O~)
5. 显⽰当前⽤户所有分区表的详细分区信息﹕
USER_TAB_PARTITIONS
6. 显⽰⼦分区信息显⽰数据库所有组合分区表的⼦分区信息﹕
DBA_TAB_SUBPARTITIONS
7. 显⽰当前⽤户可访问的所有组合分区表的⼦分区信息﹕
ALL_TAB_SUBPARTITIONS
8. 显⽰当前⽤户所有组合分区表的⼦分区信息﹕
USER_TAB_SUBPARTITIONS
9. 显⽰分区列显⽰数据库所有分区表的分区列信息﹕
DBA_PART_KEY_COLUMNS
10.显⽰当前⽤户可访问的所有分区表的分区列信息﹕
ALL_PART_KEY_COLUMNS
11.显⽰当前⽤户所有分区表的分区列信息﹕
USER_PART_KEY_COLUMNS
12.显⽰⼦分区列显⽰数据库所有分区表的⼦分区列信息﹕
DBA_SUBPART_KEY_COLUMNS
13.显⽰当前⽤户可访问的所有分区表的⼦分区列信息﹕
ALL_SUBPART_KEY_COLUMNS
14.显⽰当前⽤户所有分区表的⼦分区列信息﹕
USER_SUBPART_KEY_COLUMNS。

oracle view参数

oracle view参数

oracle view参数Oracle是一种流行的关系数据库管理系统,它提供了许多功能和特性来帮助用户管理和操作数据库。

其中之一是View(视图),它可以被看作是一个虚拟表,它是由一个查询语句定义的。

View参数是用来控制和管理Oracle中的视图的设置和行为的配置选项。

这些参数可以影响View的性能、安全性和可用性等方面。

在本文中,我们将介绍一些常用的Oracle视图参数及其作用。

1. `DEFINER AS`参数`DEFINER AS`参数用于指定一个View的创建者,也就是它的定义者。

这个参数的值可以是当前用户名,也可以是另一个用户名。

指定不同的创建者会对View的权限产生影响。

2. `WITH READ ONLY`参数`WITH READ ONLY`参数用于限制View的更新操作。

通过将这个参数设置为`WITH READ ONLY`,View将成为只读的,不能被修改。

这在某些情况下可以提高数据库的安全性。

3. `WITH CHECK OPTION`参数`WITH CHECK OPTION`参数用于限制更新View的操作。

通过将这个参数设置为`WITH CHECK OPTION`,View的更新操作必须满足与View定义相一致的条件。

这可以确保只有符合指定条件的数据才能被更新。

4. `COMPUTE STATISTICS`参数`COMPUTE STATISTICS`参数用于启用或禁用对View的统计信息的收集。

统计信息对于优化查询的执行计划非常重要。

默认情况下,Oracle会自动为View收集统计信息。

5. `FORCE`参数`FORCE`参数用于强制创建或替换一个已经存在的View。

当使用`CREATE OR REPLACE VIEW`命令创建或替换一个View时,如果指定了`FORCE`参数,Oracle将强制执行替换操作,如果View不存在,将创建一个新的View。

6.`MERGE`参数`MERGE`参数用于将多个基表的数据合并到一个View中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle视图总结(转)
视图简介:
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。

视图基于的表称为基表。

视图是存储在数据字典里的一条select语句。

通过创建视图可以提取数据的逻辑上的集合或组合。

视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

2.用户通过简单的查询可以从复杂查询中得到结果。

3.维护数据的独立性,试图可从多个表检索数据。

4.对于相同的数据可产生不同的视图。

视图的分类:
视图分为简单视图和复杂视图。

两者区别如下:
1.简单视图只从单表里获取数据,复杂视图从多表获取数据;
2.简单视图不包含函数和数据组,复杂视图包含;
3.简单视图可以实现DML操作,复杂视图不可以。

视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE:不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE:只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :该视图上不能进行任何DML操作。

例如:
Sql代码
1.CREATE OR REPLACE VIEW dept_sum_vw
2.(name,minsal,maxsal,avgsal)
3.AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
4.FROM emp e,dept d
5.WHERE e.deptno=d.deptno
6.GROUP BY d.dname;
视图的定义原则:
1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用 ORDER BY 子句;
3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象权限。

查询视图:
视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。

示例:
SQL>SELECT * FROM dept_sum_vw;
修改视图:
通过OR REPLACE 重新创建同名视图即可。

删除视图:
DROP VIEW VIEW_NAME语句删除视图。

删除视图的定义不影响基表中的数据。

只有视图所有者和具备DROP VIEW权限的用户可以删除视图。

视图被删除后,基于被删除视图的其他视图或应用将无效。

查询视图定义:
SELECT view_name,text from user_views;
其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS
得到相关信息。

视图上的DML 操作:
DML操作应遵循的原则:
1.简单视图可以执行DML操作;
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行;
3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。

d.基表中未在视图中选择的其他列定义为非空且无默认值。

WITH CHECK OPTION 子句
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。

(也就是说在执行INSERTS、UPDATES时,WHERE条件中除需要INSERT、UPDATE本身的限制条件之外,还需要加上视图创建时的WHERE条件。


例如:
CREATE OR REPLACE VIEW vw_emp20
AS SELECT * FROM emp
WHERE deptno=20
WITH CHECK OPTION constraint vw_emp20_ck;
视图已建立。

查询结果:
SELECT empno,ename,job FROM vw_emp20;
EMPNO ENAME
JOB
--------------------- --------------
-------------
7369 SMITH
CLERK
7566 JONES
MANAGER
7902 FORD
ANALYST
修改:
UPDATE vw_emp20
SET deptno=20
WHERE empno=7902;
将产生错误:
UPDATE vw_emp20
*
ERROR 位于第一行:
ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1,Oracle是可以通过视图来修改Base table的。

所谓base table就是用来构建视图的表,也就是视图的数据来源表。

但是这种修改是有条件的。

比如:create view v_emp as select empno,ename,job,deptno from emp where
deptno=10 with check option constraint emp_cnst;
如果有这个限制,那么通过视图v_emp 插入数据的deptno字段的值必须是10,否则就会报“ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句”的异常。

2,联结视图:
create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.deptno in (10,30) and e.deptno = d.deptno;将两个表的数据联结起来,看起来应该是一个内联结(Inner joint)。

对于联结视图(Joint view)的修改规则稍显复杂,设计到所谓key_preserved table的概念。

通过联结视图来修改基表,只有那些key_preserved 的表才能被修改。

上述创建视图语句中emp和dept通过deptno进行联结构成视图时,emp 就是key_preserved 表,而dept不是。

为什么?因为在dept1_staff 中empno 的值唯一的而deptno不是唯一的。

所以emp是key_preserved 而dept不是。

因此只能通过该视图来修改emp,而不能修改dept的数据。

3,Oracle视图非常强大的功能之一在于其可以创建一个带有错误的视图。

比如
说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。

当基表里加入了该字段,或者说某个字段修改成视图里的该字段名称,那么视图马上就可以成为合法的。

这个功能很有意思。

例子:
创建基表: create table v_test (name varchar2(32),age number(12));
创建带错误的视图:
create force view view_test as select name,age,address from v_test;(注意加上force选项)
由于address字段在v_test里不存在,所以会报warning: View created with compilation errors的警告,而且执行select * from view_test;时会报“ORA-04063: view “SCOTT.VIEW_TEST” 有错误”的异常。

但是如果在v_test里加上address字段,那么视图就会合法。

对基表进行修改:
alter table v_test add (address varchar2(128));
现在再执行select * from view_test;就会执行成功了。

from:/jinhualee/archive/2006/07/14/58115.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
其他问题总结:
1、视图上是否可以创建索引?
一般视图上不用建立索引,对视图的操作最终会转化为对表的操作。

一个讨论:/viewthread.php?tid=150019&extra=&page=1。

相关文档
最新文档