programing

SQL(Oracle)의 느낌표

muds 2023. 11. 7. 21:10
반응형

SQL(Oracle)의 느낌표

데이터베이스에서 V$SQL을 살펴보니 방금 다음과 같은 이상한 쿼리를 발견했습니다.

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

구문 @의 의미를 아는 사람?

오라클에서 이런 것을 본 적이 없습니다.

감사해요.

원격 데이터베이스에서 발생한 쿼리입니다.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"

데이터베이스에서 @는 종종 데이터베이스 링크와 관련됩니다.예를 들어 Oracle에서 'tns_service_name'을 사용하여 암호로 식별된 remote_username에 대한 내 링크 연결을 공용 데이터베이스 링크 생성을 사용합니다.

이 사용자(remote_username) 다음에 테이블이 있는 경우 사용할 수 있는 다른 테이블: "A2" 선택."AnotherTable"의 "AnotherColumn"@mylink "A2"에서 "A2".ROWID=1

여기서 ! 기호가 어떻게 쓰이는지 저는 잘 모르겠습니다.일반적으로 ! 기호는 데이터베이스 클라이언트가 실행 중인 셸에 액세스할 때 사용하는 기호입니다.

이게 당신에게 도움이 됐는지 모르겠네요.행운을 빌어요.

언급URL : https://stackoverflow.com/questions/21548336/exclamation-mark-in-sql-oracle

반응형