小编典典

SQL中的感叹号(Oracle)

sql

查看数据库中的V $ SQL,我刚发现一个奇怪的查询,看起来像:

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

有人知道语法@!的含义吗?

我以前从未在Oracle中见过类似的东西

谢谢


阅读 228

收藏
2021-03-23

共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"
2021-03-23