SQL(Oracle)中的感叹号

jel*_*leb 11 sql oracle

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

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

有谁知道语法@的含义!

我以前在Oracle中从未见过这样的东西

谢谢

Jam*_*mes 3

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

远程数据库已将查询推送到您的数据库执行,但为了回答查询,您的数据库需要从远程数据库拉回一些信息。这就是@!进来,基本上它是对查询源自的数据库的引用

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

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"
Run Code Online (Sandbox Code Playgroud)