在我的数据库中查看V $ SQL,我刚刚发现了一个奇怪的查询,如下所示:
UPDATE "MYTABLE" "A1" SET "SOMECOLUMN" = (
SELECT "A2"."ANOTHERCOLUMN"
FROM "ANOTHERTABLE"@! "A2"
WHERE "A2".ROWID=:B1
)
有谁知道语法@!
的含义我以前从未在Oracle中看到类似的内容
由于
答案 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的东西。
我不知道这对你有帮助吗。祝你好运。