Oracle 11g 的新特性 —— 只读表
来源:互联网 发布:update更新多条数据 编辑:程序博客网 时间:2024/06/04 18:10
上次我们介绍了 Oracle 11g 的新特性 —— 虚拟列,今天我们介绍另外一个新特性 —— 只读表。
只读表跟普通的表没有区别,但不允许任何事务对其执行任何 DML(Insert, Update, Delete) 操作。
在 Oracle 11g 之前,“只读”只对数据库和表空间有效,而到了 11g,你可以设置某个表为只读表。
在 11g 之前,如果我们要实现一个只读表,必须通过触发器和约束限制来实现。
1- 表触发器
下面我们简单创建一个表和触发器来演示这种方法:
01
CREATE
TABLE
READ_ONLY_TABLE (COL1 NUMBER);
02
03
CREATE
OR
REPLACE
TRIGGER
READ_ONLY_TABLE_TRG
04
BEFORE
DELETE
OR
INSERT
OR
UPDATE
05
ON
READ_ONLY_TABLE
06
REFERENCING NEW
AS
NEW OLD
AS
OLD
07
FOR
EACH ROW
08
DECLARE
09
BEGIN
10
RAISE_APPLICATION_ERROR (-20001,
'Table is read only table.'
);
11
END
;
12
13
INSERT
INTO
READ_ONLY_TABLE
14
VALUES
(1);
运行这个脚本你将会得到错误信息:
ORA -20001, Table is read only table.
2- 检查约束
使用下面的 SQL 语句:
1
CREATE
TABLE
READ_ONLY_TABLE2 (COL1 NUMBER);
2
3
ALTER
TABLE
READ_ONLY_TABLE2
ADD
CONSTRAINT
READ_ONLY_CONST
CHECK
(0=0) DISABLE VALIDATE;
4
5
INSERT
INTO
READ_ONLY_TABLE2
6
VALUES
(1);
执行的报错信息:
ORA-25128: No insert/update/delete on table with constraint SCOTT.READ_ONLY_CONST) disabled and validated
很麻烦对不对?
而 Oracle 11g 可通过语法 ALTER TABLE table_name RAED ONLY; 来实现只读表,看看下面 SQL 语句:
1
CREATE
TABLE
READ_ONLY_TABLE3 (COL1 NUMBER);
2
ALTER
TABLE
READ_ONLY_TABLE3
READ
ONLY
;
3
INSERT
INTO
READ_ONLY_TABLE3
VALUES
(1);
执行后的报错信息是:
ORA-12081: update operation not allowed on table "SCOTT"."READ_ONLY_TABLE3"
可是我怎么知道一个表是否只读表呢?
你可以通过数据字典视图 (ALL_TABLES,DBA_TABLES,USER_TABLES,TABS)中的 READ_ONLY 列得知,如:
1
SELECT
table_name, READ_ONLY
FROM
tabs;
运行结果:
0 0
- Oracle 11g 的新特性 —— 只读表
- oracle 11g 新特性---只读表
- 只读表(Read-only)--Oracle 11g 新特性
- Oracle 11g 新特性 -- 只读表(read-only table)说明
- Oracle 11g 新特性 -- 只读表(read-only table)
- Oracle 11g新特性之--只读表(read only table)
- Oracle 11g 的新特性 —— 虚拟列
- Oracle 11g 的新特性 —— 虚拟列
- Oracle 11g 诊断新特性——ADR 简介
- Oracle 11g 诊断新特性——ADR 简介
- Oracle 11g 新特性——I/O校准
- Oracle 11g新特性 — DG压缩传送日志
- Oracle 11g 新特性
- Oracle 11g新特性
- oracle 11g 新特性
- ORACLE 11G新特性
- ORACLE 11g新特性
- ORACLE 11G新特性
- ubuntu vi/vim 基本使用方法
- GUI Texture
- 中美两国第一夫人的晚宴在京城最具神秘感的养源斋进行
- SAP会计科目中英文对照表
- 在用户态下使用gpio中断
- Oracle 11g 的新特性 —— 只读表
- JAVA中的面向对象初学(持续总结更新...)
- net.sf.json.exception:Unquotted String错误,解决办法。
- freemarket 遍历Map
- 报错java.lang.Long cannot be cast to java.lang.Integer
- 关于typedef用法的总结
- 希尔排序
- 利用Delphi里面的IdIcmpClient控制来检测网络是否正常连通
- Oracle 11g 的新特性 —— 虚拟列