SQL(Oracle)中的感叹号

时间:2014-02-04 09:22:17

标签: sql oracle

在我的数据库中查看V $ SQL,我刚刚发现了一个奇怪的查询,如下所示:

UPDATE "MYTABLE" "A1" SET "SOMECOLUMN" = (
    SELECT "A2"."ANOTHERCOLUMN" 
    FROM "ANOTHERTABLE"@! "A2" 
    WHERE "A2".ROWID=:B1
)

有谁知道语法@!

的含义

我以前从未在Oracle中看到类似的内容

由于

2 个答案:

答案 0 :(得分:1)

它是源自远程数据库的查询。使用@DB_NAME语法在远程数据库的查询中引用了您在V $ SQL中看到此查询的数据库

远程数据库已将查询推送到您的数据库以供执行,但为了回答查询,您的数据库需要从远程数据库中提取一些信息。这是@的地方!进来,基本上它是一个回溯到查询源自

的数据库的引用

例如,创建一个测试数据库链接,甚至创建到同一个数据库,然后运行:

alter system flush shared_pool;
select sysdate from dual@myself;
select sql_text from gv$sql where sql_fulltext like '%@!%';

SQL_TEXT
--------
SELECT SYSDATE@! FROM "DUAL" "A1"

答案 1 :(得分:-1)

数据库中的@通常与数据库链接相关。 例如。在Oracle中我使用 创建公共数据库链接   myLink的 连接至   remote_username 由...确定   我的密码 使用'tns_service_name';

如果此用户(remote_username)之后有一个表ANOTHERTABLE,您可以使用: 选择“A2”。“ANOTHERCOLUMN” 来自“ANOTHERTABLE”@mylink“A2” 在哪里“A2”.ROWID = 1

如何!这里使用的标志对我来说还不清楚。通常是! sign是您用来访问运行数据库客户端的shell的东西。

我不知道这对你有帮助吗。祝你好运。