2012-07-26 17 views
5

Sto cercando di determinare cosa sta facendo questo codice (Oracle SQL), in particolare il punto esclamativo con segno con segno nella clausola from.Che cosa fa @! significa in una dichiarazione 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, il simbolo @ è in realtà chiamato "at" o "hat". E commerciale è questo: &. – Matt

+1

Non è possibile inserire 4 colonne in 3 colonne. "@" Indica solitamente un collegamento al database. Ma non l'ho mai visto insieme a un "!" – winkbrace

+3

'!' Dovrebbe essere un nome di collegamento al database, ma non è un carattere legale da avere in uno. Forse questo dovrebbe essere eseguito da uno script di shell che esegue una sostituzione in tempo reale di '!' Per un nome di collegamento reale, anche se sarebbe una scelta strana; e come @BazzPsychoNut sottolinea che fallirà comunque nel mismatch della colonna. L'unico uso di '!' Di cui sono a conoscenza in Oracle è come l'operatore ['soundex'] (http://docs.oracle.com/cd/E11882_01/text.112/e24436/cqoper.htm#sthref1108) , che chiaramente non è il caso qui. –

risposta

-1

Non penso che questo sia valido SQL. Controlla il tuo codice per assicurarti che nulla venga cambiato prima dell'esecuzione di SQL, in particolare verifica se il nome di un collegamento al database viene sostituito per lo !.

Se non è possibile determinare ciò che viene eseguito, si potrebbe mettere una traccia sul database

+0

Questo codice viene estratto da Esecuzioni SQL monitorate in Controllo griglia (con un numero di linee rimosso - ecco perché mostra 4 selezionare con solo 3 colonne di inserimento). – user739866

5

Si tratta di un database link inverso al database originale, in cui viene eseguita la query. La query originale deve essere simile a:

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"); 

In questo modo tutte le tabelle remote diventano locali e le tabelle locali diventano remote con "@!".

Problemi correlati