oracle select with read only,Oracle 11g 的新特性 —— 只读表

上次我们介绍了 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

BEFOREDELETE OR INSERT OR UPDATE

05

ON READ_ONLY_TABLE

06

REFERENCING NEWAS NEW OLDAS 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_TABLE2ADD CONSTRAINT READ_ONLY_CONSTCHECK(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_TABLE3READ ONLY;

3

INSERT INTO READ_ONLY_TABLE3VALUES (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_ONLYFROM tabs;

运行结果:

12604b9b115de91413e5fac9ae881814.png

全文完!0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值