2012-07-26 7 views
5

Próbuję ustalić, co robi ten kod (Oracle SQL) - zwłaszcza znak zapytania o znaku wykrzyknika w klauzuli from.Co to jest @! w oświadczeniu From

INSERT INTO "LOCATIONS" "A1" 
      ("LOCATION_ID", 
      "SEQUENCE", 
      "POINT_TYPE") 
SELECT "A2"."LOCATION_ID", 
     "A2"."SEQUENCE", 
     "A2"."LOCATION_TYPE", 
     "A2"."POINT_TYPE" 
FROM "LOCATIONS"@! "A2" 
WHERE NOT EXISTS (SELECT 1 
        FROM "LOCATIONS" "A3" 
        WHERE "A3"."LOCATION_ID" = "A2"."LOCATION_ID") 
+1

FYI, symbol @ jest rzeczywiście nazywany "at" lub "hat". Ampersand to: &. – Matt

+1

Nie można wstawić 4 kolumn do 3 kolumn. "@" Zwykle oznacza link do bazy danych. Ale nigdy nie widziałem tego razem z "!" – winkbrace

+3

'!' Powinno być nazwą łącza do bazy danych, ale nie jest to postać prawna, która ma być w jednym. Być może ma to być uruchamiane ze skryptu powłoki, który zastępuje '!' W czasie rzeczywistym dla prawdziwej nazwy łącza, chociaż byłby to dziwny wybór; i jak @BazzPsychoNut wskazuje, że i tak nie powiedzie się na niezgodności kolumn. Jedynym użyciem '!' Mam świadomość, że w Oracle jest ['soundex' operator] (http://docs.oracle.com/cd/E11882_01/text.112/e24436/cqoper.htm#sthref1108) , co oczywiście nie ma tu miejsca. –

Odpowiedz

-1

Nie sądzę, że jest to poprawny kod SQL. Sprawdź kod, aby upewnić się, że nic nie zostanie zmienione przed wykonaniem kodu SQL - w szczególności sprawdź, czy nazwa łącza do bazy danych została zastąpiona przez !.

Jeżeli nie można ustalić, co jest realizowane, można umieścić ślad na bazie

+0

Ten kod jest pobierany z Monitorowanych instrukcji SQL w Grid Control (z usuniętą liczbą wierszy - dlatego pokazuje 4 zaznaczenia z tylko 3 wstawionymi kolumnami). – user739866

5

Jest to reverse link bazy danych do oryginalnej bazy danych, w której zapytanie jest wykonywany. Oryginalny zapytanie musi wyglądać następująco:

INSERT INTO [email protected]_db 
      ("LOCATION_ID", 
      "SEQUENCE", 
      "POINT_TYPE") 
SELECT "A2"."LOCATION_ID", 
     "A2"."SEQUENCE", 
     "A2"."POINT_TYPE" 
FROM "LOCATIONS" A2 
WHERE NOT EXISTS (SELECT 1 
        FROM [email protected]_db A3 
        WHERE "A3"."LOCATION_ID" = "A2"."LOCATION_ID"); 

ten sposób wszystkie tabele zdalne stać lokalny i lokalne tablice stać pilot z „@”.