- 浏览: 1728868 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (288)
- java (59)
- javaweb (15)
- eclipse (16)
- uml (1)
- java ee (7)
- windows (5)
- html (4)
- 数据结构和算法 (6)
- oracle (84)
- struts (3)
- ajax (3)
- hibernate (3)
- spring (12)
- ExtJS (14)
- 随笔 (2)
- JavaScript (9)
- PL SQL (12)
- tomcat (2)
- Plugins (5)
- office (2)
- webService (4)
- others (9)
- htc (1)
- 自定义标签的行为 (1)
- powerDesigner (3)
- webSphere (5)
- linux (6)
- dom4j (1)
- xml (5)
- json (2)
- bat (4)
- spring MVC (5)
- MySQL (12)
- junit (4)
- maven (10)
- jquery (1)
- mongoDB (16)
- git (0)
- mybatis (5)
- svn (3)
- activemq (3)
- quartz_job (1)
最新评论
-
白天看黑夜:
PDMReader实现pdm建模快速导出word,html文件 ...
利用powerDesigner逆向导出oracle表为PDM并把PDM转为CDM -
sanshao:
roompig 写道beancopier只实现了浅拷贝的功能, ...
使用Cglib的BeanCopier实现Bean的拷贝 -
贝塔ZQ:
Java实现导入导出excel文件,利用poi实现感觉代码比较 ...
利用java导入导出excel到oracle数据库 -
suxj16:
部署之后启动有问题org.springframework.be ...
spring mvc文件上传实现进度条(转) -
suxj16:
谢谢分享。部署之后启动有问题org.springframewo ...
spring mvc文件上传实现进度条(转)
以前只知道视图可以用来查询,最近才知道,原来视图还是可以像普通表一样进行增、删、改操作的。而我们通常用写的视图虽然仅仅只是用来进行查询,而且在建立查询视图的时候,我们从来没有考虑到将视图建立成只读格式,我意识到,事实上我们的视图是不安全的。
接下来,我将详细说明如何对视图进行数据的添加、修改和删除。
在切入主题之前,首先说明一下视图的格式定义:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW YOUR_VIEW_NAME (COLNAME1,COLNAME2,COLNAME3,...,COLNAMEn) AS [YOUR_QUERY_STATEMENTS WILL WRITE HERE !] [WITH CHECK OPTION [CONSTRAINTNAME constraint_name]] [WITH READ ONLY]
说明:
首先我想说一下 FORCE 与 NOFORCE 的区别,有时候你在创建视图时可能会报一个“表或视图”不存在的错误。如果选择了
FORCE 选项,不论你的 SQL 是否有问题,只要符合语法规则,Oracle
都会按照你的意图将其创建。这样你就可以在视图建立好以后再建表,或者向表中加字段。
其次就是 WITH CHECK OPTION
,这个条件一般对于查询类视图是没有太大的用途的。但是如果你要执行DML操作,那么,这个检查将会限制你只能访问被 Where
子句所限制了的记录。更或者确切的说,如果你所执行的操作影响到视图中的一条记录不再满足视图的限制条件,那么,Oracle
就不会允许你进行该操作。这样,事实上就保证了视图中数据的完整性。
最后,也是最重要,用来保证视图安全性的 WITH READ ONLY
指令。默认情况下,Oracle中的视图如果没有申明只读,理论上都可以执行DML操作。因此,如果要保证你的视图是只读的,那就应该显式声明一下。其
实,如果业务上没有在视图上执行 DML
操作的需求的话,一般建议在建立视图时都将其声明为只读格式的,这样不但保证了视图中数据不会被非法修改,而且从一定程度上还可以提升视图的执行效率。
说了半天的闲话,我们现在开始聊聊如何对视图执行DML操作。如果是简单视图,而且没有声明 WITH READ ONLY 那你就放心大胆的执行吧,没什么不行的,为了说明问题,我们先小试牛刀。
一:简单视图执行的 DML 操作
首先,将设库中已经有Dept这张表,我们建一个视图,命名为 V_Dept ,定义过程如下:
1>用到的表定义:
CREATE TABLE DEPARTMENT ( DEPARTMENTID VARCHAR2(32 BYTE) NOT NULL, NAME VARCHAR2(32 BYTE) NOT NULL, INNERCODE VARCHAR2(3 BYTE) NOT NULL, FULLNAME VARCHAR2(32 BYTE), STATUS VARCHAR2(1 BYTE) NOT NULL, COMMENTS VARCHAR2(100 BYTE) )
2>视图定义:
CREATE OR REPLACE VIEW V_Dept AS SELECT * FROM DEPT
从定义中可以看出,事实上我们这里的定义方式跟 Oracle 视图定义的标准格式还有些出入,不过没关系,Oracle
在遇到没有定义字段名的视图时他会自动将原表中的字段名称当做视图的字段名称。执行编译,系统提示view created
。OK,我们接下来对这个简单视图进行数据的修改、增加和删除。
首先我们对视图进行一次数据查询,执行如下:
select * from v_dept
返回消息>>11 rows return
OK , 首先保证我们的表中有数据(没有数据的仁兄们就得自己想办法喽^^)。然后小试牛刀让我们来执行一条插入语句:
Insert into v_dept (DEPARTMENTID, NAME, INNERCODE, FULLNAME, STATUS, COMMENTS) Values ('SP13618d5cWWWWW', '后勤公司', '17', '后勤服务公司', '0', '主要用于教学场地的管理'); COMMIT;
返回消息>>1 row inserted
OK , 说明简单视图可以执行插入语句,接下来我们再试一下修改语句,我们同样还是修改刚才插入的这条记录:
修改:update v_dept set DEPARTMENTID='SP13618d5c' where DEPARTMENTID='SP13618d5cWWWWW';
删除:delete v_dept where DEPARTMENTID='SP13618d5c'
执行上面的两条语句,我们可以看到对于简单视图我们可以像对真实表一样进行 DML 操作。那么对于复杂视图呢?
二:复杂视图在有条件的情况下执行 DML 操作。
具体的限制条件如下:
1〉不允许违反约束的 DML 操作。
2〉不能将一个值添加到包含算术表达式的列中
3〉在非 key-preserved 表上不允许 DML 操作 .
4〉在包含组函数、GROUP BY 子句、ROWNUM伪列或DISTINCT关键字的视图上不允许 DML 操作。
发表评论
-
日期差的天时分秒表示SQL(转)
2015-01-09 14:47 2419文章出自:http://blog.csdn.net/ ... -
MySQL分组后排序的问题(转)
2014-05-21 11:31 1718文章出自:http://zhidao.baidu.co ... -
在oracle的decode函数中实现like相同操作
2014-03-28 14:37 10897在oracle的decode函数中不能使用like操作 ... -
45个非常有用的Oracle查询语句分享
2014-03-17 13:41 961文章出自:http://tech.it168.com ... -
能使 Oracle 索引失效的七大限制条件
2014-03-17 13:11 6219文章出自:http://tech.it168.com/ ... -
oracle存储过程异常处理及时间戳变量类型
2014-03-15 18:02 3110下面通过一个简单 ... -
对只转发结果集的无效操作: isLast
2014-03-13 14:19 2720在遍历结果集的时候,用rs.isLast()来判断是否到达 ... -
oracle连接DBLINK报错:ORA-12154: TNS:could not resolve service name的解决办法(转)
2014-01-13 15:56 3149文章出自:http://blog.csdn.net/x ... -
查看oracle enterprise manager端口的途径(转)
2014-01-13 12:04 1327文章出自:http://www.myexception ... -
利用java导入导出excel到oracle数据库
2013-12-05 14:46 8638用到的JAR包如下(可以直接到POI官网上下载也可以 ... -
WebSphere+Oracle乱码问题解决
2013-11-26 15:01 1573环境介绍: Web容器(中间件):W ... -
v$session 的权限(转)
2013-11-15 13:32 1828文章出自:http://blog.csdn.net/x ... -
Oracle中查看所有表和字段(转)
2013-08-29 11:48 1251文章出自以下两个网站: Oracle中查看所有表和字 ... -
oracle杀掉正在运行的存储过程
2013-08-28 16:05 3260本篇文章主要介绍如何kill掉一个正在运行的存储过程, ... -
oracle中v$access视图介绍
2013-08-28 15:49 8470如果想了解如果杀掉一个正在运行的存储过程,请查询这篇 ... -
oracle 临时表介绍(整合)
2013-08-27 11:14 2474在工作中用临时表从A库到B库导入LOB(大)字段,用临 ... -
oracle 的连接操作(left jion,right jion, full jion)
2013-06-14 12:52 25341.创建测试表 -- Create table ... -
如何查看oracle的版本信息(转)
2013-05-07 08:30 1214文章出自: http://blog.sina.com. ... -
oracle触发器实践(增,改,删)
2013-04-27 14:02 1388实现对某个表的增改删的监控操作,并记录到另一个表中. ... -
Oracle如何正确删除archivelog文件(转)
2013-04-10 13:29 2951文章出自 : http://cac ...
相关推荐
对视图进行增删改查操作时,需要注意一些限制。视图可以用于查询,但插入和修改操作可能会受到限制。例如,如果视图包含聚合函数或GROUP BY子句,那么通常不允许在该视图上执行DML(数据操纵语言)操作。然而,如果...
本次实验了解DML语言的INSERT、UPDATE、DELETE对数据的操作,学会SQL Server的查询分析器中用DML语言对表中的数据进行插入、删除和修改。了解DDL语言的CREATE、DROP、ALTER对视图的操作,学会SQL Server的查询分析器...
在实际工作中,理解并熟练运用这些Hive的DML操作,能够有效地管理和分析大数据集。对于“产品说明.zip”和“文档.pdf”,它们可能包含了更深入的操作指南、示例代码以及最佳实践,帮助用户更好地理解和应用Hive的DML...
- **复杂视图**:数据来自多个表,可能包含函数或数据分组,不一定允许通过视图进行DML操作。 3. **视图的使用**:可以从视图中检索数据,如同从普通表中一样,可以显示整个视图的内容或特定的行和列。 4. **数据...
在Oracle中,DML操作是事务的一部分,可以使用`COMMIT`提交更改,或者使用`ROLLBACK`撤销未提交的更改。此外,`TRUNCATE`语句虽然看似DML,但实际上属于DDL,因为它涉及的是数据结构的改变,而不是单个数据记录的增...
本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的类型**: - 在SQL Server中,有DML(Data Manipulation Language)触发器和DDL(Data Definition Language)...
有些视图可能不允许DML操作,或者需要满足特定条件(如`WITH CHECK OPTION`)。 7. **视图的用途**: 视图常用于报表和数据分析,提供了一种安全机制,因为可以控制用户对数据的访问权限。同时,视图也是数据库...
创建,修改,删除索引的方法 基于函数索引的特点 位图索引的特点 创建和管理视图的方法 对视图进行DML操作的方法 内嵌视图的应用特点
但请注意,这个视图只保存了最近的修改信息,对于更长时间前的DML操作可能无法提供准确信息。 第三种方式是通过审计功能。Oracle数据库提供审计功能,可以记录所有或特定的DML操作。审计记录存储在审计表或操作系统...
- **可更新视图**:如果视图基于可更新的查询,且满足特定条件(如没有使用聚合、GROUP BY、DISTINCT等),则可以执行DML操作。但更新可能会影响多个基础表。 ### 视图的修改与删除 要修改已存在的视图,可以使用...
【数据库操作与视图】是关于使用Transact-SQL对数据库进行数据操作和视图创建的知识点。Transact-SQL是SQL的一个扩展,主要用于Microsoft SQL Server。数据操作语言(DML)包括四个主要命令:SELECT、INSERT、UPDATE...
以下是关于DML操作的一些详细说明: 1. **插入数据(Insert)**: 插入数据到表中通常使用`INSERT INTO`语句。例如: ```sql INSERT INTO stu (id, name, sex, age) VALUES ("001", "张三", "man", 20); ``` ...
总的来说,MaxCompute的DML操作主要集中在数据的插入和查询,而它的设计和实现都是为了应对大数据环境下的批量处理任务,而不是实时查询和更新操作。了解这些特性对于有效利用MaxCompute进行大数据分析至关重要。在...
这意味着,当试图对视图执行DML操作时,替代触发器将执行自定义的逻辑,而不是尝试在基础表上执行操作。 10.4 系统触发器 系统触发器是Oracle自动创建并触发的,它们响应数据库级别的事件,如数据库启动、用户登录...
3、简单视图可以实现DML操作,复杂视图不可以。 语法结构:创建视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT ...
7. **OLD_NEW$$**: 表示物化视图日志中保存的信息是DML操作之前的值(旧值)还是DML操作之后的值(新值)。 8. **CHANGE_VECTOR$$**: 记录DML操作发生在哪些字段上。 #### 三、物化视图日志如何支持多物化视图的...
- 当在视图上需要执行DML操作时,可以使用INSTEAD OF触发器,因为直接在视图上执行DML是不允许的。替代触发器会代替DML语句执行,实现对底层表的实际操作。 5. **系统触发器和用户事件触发器** - **系统触发器**...
这些操作展示了视图在实际应用中的便捷性,因为可以直接在视图上执行DML(数据操纵语言)操作,而无需直接操作基础表。 最后,实验通过DROP VIEW语句删除了C_P_N视图,展示了视图的可动态管理性。实验结束后,学生...
其中包括创建学生子表、修改课程成绩、清除空值、构建特定条件下的视图以及对这些视图进行查询、插入、更新、删除等操作。同时涉及了用户角色的新增与权限分配回收。 适合人群:初学者到进阶水平的关系型数据库...