我在 Oracle 中有一个数据库链接,当我查询一些数据时:select * from kfilwrk@something for read only
,我有一个错误:"缺少关键字& #34 ;.我可以编写select语句,但问题是,我需要添加for read only
,因为我的select
语句可能会更改某些数据。
UPD:当我编写简单的select语句并检索数据时,我关闭SQL Developer后,它要求我回滚或提交数据。这意味着选择光标会更新一些数据
答案 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查询位于同一连接上。