查看数据库中的V $ SQL,我刚发现一个奇怪的查询,看起来像:
UPDATE "MYTABLE" "A1" SET "SOMECOLUMN" = ( SELECT "A2"."ANOTHERCOLUMN" FROM "ANOTHERTABLE"@! "A2" WHERE "A2".ROWID=:B1 )
有人知道语法@!的含义吗?
我以前从未在Oracle中见过类似的东西
谢谢
这是源自远程数据库的查询。使用@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"