请教ORACLE 的SELECT 语句 WITH READ ONLY 的作用

chentony 2009-12-12 11:38:56
SELECT crac.HEADER_ID /*PK*/,
crac.COST_GROUP_ID,
crac.COST_TYPE_ID,
crac.PERIOD_ID,
crac.RCV_TRANSACTION_ID,
crac.NET_QUANTITY_RECEIVED,
crac.TOTAL_QUANTITY_INVOICED,
crac.QUANTITY_AT_PO_PRICE,
crac.TOTAL_INVOICE_AMOUNT,
crac.AMOUNT_AT_PO_PRICE,
crac.TOTAL_AMOUNT,
crac.COSTED_QUANTITY,
crac.ACQUISITION_COST,
crac.PO_UNIT_PRICE,
crac.PRIMARY_UOM,
crac.REC_EXCHG_RATE /* FOREIGN KEYS RESOLVED */,
ccg.cost_group,
cct.cost_type,
cpp.period_name,
rt.TRANSACTION_TYPE,
rt.TRANSACTION_DATE /* ID */,
crac.PO_LINE_LOCATION_ID /* WHO */,
crac.creation_date,
crac.created_by,
crac.last_update_date,
crac.last_updated_by
FROM CST_PAC_PERIODS cpp,
CST_COST_GROUPS ccg,
CST_COST_TYPES cct,
RCV_TRANSACTIONS rt,
CST_RCV_ACQ_COSTS crac
WHERE crac.PERIOD_ID = cpp.PAC_PERIOD_ID
AND crac.cost_group_id = ccg.cost_group_id
AND crac.cost_type_id = cct.cost_type_id
AND crac.RCV_TRANSACTION_ID = rt.TRANSACTION_ID WITH READ ONLY


加了WITH READ ONLY 有什么作用
...全文
1283 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
WITH READ ONLY
Specify WITH READ ONLY to indicate that the table or view cannot be updated.

这样等于通知ORALCE,只是查看,不做做更新。速度上会加快,不需要加锁。
[/Quote]

学习了。。。
chentony 2009-12-19
  • 打赏
  • 举报
回复
CREATE OR REPLACE VIEW A AS
select * from AAAA where 1= 1 with read only


这个是可以成功的,不好意思我前面没有说明清楚。
chentony 2009-12-19
  • 打赏
  • 举报
回复
我是从一个视图中取出的SQL
BenChiM888 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 weiminan 的回复:]
引用 5 楼 benchim888 的回复:
建视图有三种模式:
1、默认的模式,就是什么也不加。
SQL code--可以更新的createorreplaceview view_aasselect xxxfrom table_name;--不可以可以更新的createorreplaceview view_aasselect xxxfrom table_name1 a,table_name2 bwhere a.xxx=b.xxx;--还有很多种情况不允许更新呢,比如视图中用了distinct、group by 等



视图本来就是只能读,不能更新的!
[/Quote]

不屑与你争论,自己看吧。

[TEST@ora10gr1#2009-12-18/08:06:45] SQL>desc t1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER
NAME VARCHAR2(10)

[TEST@ora10gr1#2009-12-18/08:06:47] SQL>create or replace view t1_view as select * from t1

View created.

[TEST@ora10gr1#2009-12-18/08:07:03] SQL>select * from t1_view;

no rows selected

[TEST@ora10gr1#2009-12-18/08:07:14] SQL>select * from t1;

no rows selected

[TEST@ora10gr1#2009-12-18/08:07:45] SQL>insert into t1_view values(1,'a');

1 row created.

[TEST@ora10gr1#2009-12-18/08:07:49] SQL>select * from t1_view;

ID NAME
---------- ----------
1 a

[TEST@ora10gr1#2009-12-18/08:07:56] SQL>select * from t1;

ID NAME
---------- ----------
1 a




--select 后面直接加。。。。。
[TEST@ora10gr1#2009-12-18/08:07:59] SQL>select * from t1 with read only;
select * from t1 with read only
*
ERROR at line 1:
ORA-00933: SQL command not properly ended

iqlife 2009-12-18
  • 打赏
  • 举报
回复
只读
chentony 2009-12-18
  • 打赏
  • 举报
回复
呵呵,有点热闹了,也有点钻牛角

wh62592855 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 weiminan 的回复:]
引用 5 楼 benchim888 的回复:
建视图有三种模式:
1、默认的模式,就是什么也不加。
SQL code--可以更新的createorreplaceview view_aasselect xxxfrom table_name;--不可以可以更新的createorreplaceview view_aasselect xxxfrom table_name1 a,table_name2 bwhere a.xxx=b.xxx;--还有很多种情况不允许更新呢,比如视图中用了distinct、group by 等



视图本来就是只能读,不能更新的!
[/Quote]
视图是可以更新的
但不是每个视图都可以更新的
wh62592855 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zcy348234691 的回复:]
引用 6 楼 wh62592855 的回复:
哦……是在创建视图的时候加with read only喽

那楼主那样在select后面直接加with read only有什么特殊作用吗?


我不知到你的意思是不是select语句后面直接用with read only  , 请问直接用行吗 我why测试就是不行啊??新手学习中了
[/Quote]呵呵 我也测试了 也不成功
SQL> select * from t_row_str with read only;
select * from t_row_str with read only
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
zcy348234691 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wh62592855 的回复:]
哦……是在创建视图的时候加with read only喽

那楼主那样在select后面直接加with read only有什么特殊作用吗?
[/Quote]

我不知到你的意思是不是select语句后面直接用with read only , 请问直接用行吗 我why测试就是不行啊??新手学习中了
weiminan 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 benchim888 的回复:]
建视图有三种模式:
1、默认的模式,就是什么也不加。
SQL code--可以更新的createorreplaceview view_aasselect xxxfrom table_name;--不可以可以更新的createorreplaceview view_aasselect xxxfrom table_name1 a,table_name2 bwhere a.xxx=b.xxx;--还有很多种情况不允许更新呢,比如视图中用了distinct、group by 等

[/Quote]

视图本来就是只能读,不能更新的!
crazylaa 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
WITH READ ONLY
Specify WITH READ ONLY to indicate that the table or view cannot be updated.

这样等于通知ORALCE,只是查看,不做做更新。速度上会加快,不需要加锁。
[/Quote]

mark
wh62592855 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
WITH READ ONLY
Specify WITH READ ONLY to indicate that the table or view cannot be updated.

这样等于通知ORALCE,只是查看,不做做更新。速度上会加快,不需要加锁。
[/Quote]请教一下
普通的select不是也不会加锁的吗? 不是只有for update才会加锁么

难道默认的select就是with read only??
wh62592855 2009-12-13
  • 打赏
  • 举报
回复
哦……是在创建视图的时候加with read only喽

那楼主那样在select后面直接加with read only有什么特殊作用吗?
BenChiM888 2009-12-13
  • 打赏
  • 举报
回复
建视图有三种模式:
1、默认的模式,就是什么也不加。

--可以更新的
create or replace view view_a as
select xxx from table_name;
--不可以可以更新的
create or replace view view_a as
select xxx from table_name1 a,table_name2 b where a.xxx=b.xxx;
--还有很多种情况不允许更新呢,比如视图中用了distinct、group by 等

2、with read only 只读视图,不允许通过本视图更新本表

create or replace view view_a as
select xxx from table_name with read only;

3、with check option 允许通过视图更新本表,但是要check 视图的where条件。

create or replace view view_a as
select xxx from table_name where id < 10 with check option;

这种情况下,只能通过视图更新 id < 10 的数据,id >=10 的数据不允许更新。



chentony 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wh62592855 的回复:]
引用 1 楼 acmain_chm 的回复:
WITH READ ONLY
Specify WITH READ ONLY to indicate that the table or view cannot be updated.

这样等于通知ORALCE,只是查看,不做做更新。速度上会加快,不需要加锁。
请教一下
普通的select不是也不会加锁的吗? 不是只有for update才会加锁么

难道默认的select就是with read only??
[/Quote]

期待有更深入的解释
ACMAIN_CHM 2009-12-12
  • 打赏
  • 举报
回复
WITH READ ONLY
Specify WITH READ ONLY to indicate that the table or view cannot be updated.

这样等于通知ORALCE,只是查看,不做做更新。速度上会加快,不需要加锁。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧