Восклицательный знак в SQL (Oracle)

Глядя на V $SQL в моей базе данных, я только что нашел странный запрос, который выглядит так:

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

Кто-нибудь знает значение синтаксиса @!

Я никогда раньше не видел что-то подобное в Oracle

Спасибо

Ответ 1

Это запрос, который возник из удаленной базы данных. База данных, в которой вы видели этот запрос в V $SQL, была указана в запросе в удаленной базе данных с использованием синтаксиса @DB_NAME

Удаленная база данных выполнила запрос к вашей базе данных для выполнения, но для ответа на запрос ваша база данных должна извлечь некоторую информацию из удаленной базы данных. Вот где @! приходит, в основном это ссылка на базу данных, где запрос возник из

Например, создайте ссылку тестовой базы данных даже в той же базе данных и запустите ее:

alter system flush shared_pool;
select sysdate from [email protected];
select sql_text from gv$sql where sql_fulltext like '%@!%';

SQL_TEXT
--------
SELECT [email protected]! FROM "DUAL" "A1"

Ответ 2

Часто @в базах данных связаны с ссылкой на базу данных. Например. в Oracle я использую создать ссылку на общую базу данных MyLink подключиться к remote_username определенных мой пароль используя 'tns_service_name';

если после этого пользователя (remote_username) есть таблица ANOTHERTABLE, вы можете использовать: ВЫБРАТЬ "A2" . "ANOTHERCOLUMN" FROM "ANOTHERTABLE" @mylink "A2" ГДЕ "A2" .ROWID = 1

Как! Знак используется здесь для меня непонятно. Обычно! знак - это то, что вы используете для доступа к оболочке, в которой работает клиент базы данных.

Я не знаю, это помогло вам. Удачи.