oracle中的select语句用于只读

时间:2014-07-24 07:57:37

标签: sql oracle readonly

我在 Oracle 中有一个数据库链接,当我查询一些数据时:select * from kfilwrk@something for read only,我有一个错误:"缺少关键字& #34 ;.我可以编写select语句,但问题是,我需要添加for read only,因为我的select语句可能会更改某些数据。


UPD:当我编写简单的select语句并检索数据时,我关闭SQL Developer后,它要求我回滚或提交数据。这意味着选择光标会更新一些数据

2 个答案:

答案 0 :(得分:2)

语法为WITH READ ONLY,而非FOR READ ONLY,且只能与子查询一起使用:

SQL> CREATE DATABASE LINK MyLink CONNECT TO HR IDENTIFIED BY HR USING 'sampleHost:1521/XE';
SQL> SELECT COUNT(*) FROM (SELECT * FROM Dual@MyLink WITH READ ONLY);

  COUNT(*)
----------
         1

另见http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF55295

  

subquery_restriction_clause 使用subquery_restriction_clause可以通过以下方式之一限制子查询:

     

WITH READ ONLY 指定WITH READ ONLY以指示无法更新表或视图。

或者,您可以将交易设置为只读模式:

SET TRANSACTION READ ONLY;      -- Read only
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;   -- back to default (read committed)

答案 1 :(得分:0)

如果您通过DB_LINK查询,则数据库假定在关闭时有COMMIT交易。

此外,SQL Developer具有Worksheet和Database Navigator / Object Editors的共享连接。因此,如果您打开了一个表并更改了一条记录 - 它与工作表上的SELECT查询位于同一连接上。