Domanda

Sono stato porting seleziona oracolo, e Sono stato in esecuzione in un sacco di domande in questo modo:

SELECT e.last_name,
       d.department_name
  FROM employees e,
      departments d
WHERE e.department_id(+) = d.department_id;

... e:

SELECT last_name, 
       d.department_id
  FROM employees e, 
       departments d
 WHERE e.department_id = d.department_id(+);

Ci sono guide / tutorial per la conversione di tutte le varianti del (+) la sintassi? Che cosa è che la sintassi anche chiamato (in modo da poter setacciare google)?

Ancora meglio .. Esiste uno strumento / script che farà questa conversione per me (preferito Free)? Un ottimizzatore di qualche tipo? Ho circa 500 di queste query alla porta ..

Quando è stato questo standard ritirate dal mercato? Qualsiasi info è apprezzato.

È stato utile?

Soluzione

Il (+) è Oracle specifica pre-ANSI-92 outer join sintassi, perché ANSI-89 sintassi non fornisce la sintassi per il supporto OUTER JOIN.

Se è RIGHT o LEFT è determinato da cui riferimenti tavolo e colonna la notazione è attaccato. Se è specificato accanto a una colonna associata con la prima tabella nella clausola FROM - è un RIGHT aderire. In caso contrario, si tratta di un LEFT aderire. Questo è un buon riferimento per chiunque abbia bisogno di sapere la differenza tra JOIN .

Prima di query riscritta utilizzando sintassi ANSI-92:

    SELECT e.lastname,
           d.department_name
      FROM EMPLOYEES e
RIGHT JOIN DEPARTMENTS d ON d.departmentid = e.departmentid

seconda query riscritta utilizzando sintassi ANSI-92:

   SELECT e.lastname,
          d.department_name
     FROM EMPLOYEES e
LEFT JOIN DEPARTMENTS d ON d.departmentid = e.departmentid

Altri suggerimenti

Google "Oracle join sintassi". il (+) viene utilizzato per diversi gusti di join esterno. Credo che il primo che hai mostrato è un Left Outer Join, e il secondo è un esterno destro registrazione. Non ho visto questa notazione per un bel po ', così ho potuto essere un po' fuori, ma si spera, questo ti dà abbastanza informazioni per colpire Google e ottenere la risposta giusta.

UPDATE:

Così si vuole uno strumento per farlo per voi? Ho sentito dire che SwisSQL può fare qualcosa di simile, ma se la maggior parte delle domande sono abbastanza semplici probabilmente si può scrivere un piccolo script che fa per voi. OMG Ponies rispondere ben mostra il motivo per la conversione dal vecchio al nuovo sintassi.

Questo può diventare piuttosto complicato come la clausola WHERE in situazioni anche semplici come ad esempio

WHERE e.id = d.manager_id(+) OR e.id = d.contact_id(+)

si tradurrà a UNION o query sottoselezione.

Se come Python si potrebbe dare un'occhiata a sqlparse , sembra promettente e si potrebbe arrivare a fare ciò che è necessario più alcuni riformattazione del codice SQL. Sarebbe facilmente lavorare direttamente sulla sorgente. Dovrete dirgli cosa fare, ma lo fa ad alleviare di scrivere la parte noiosa analisi.

Per Oracle 10g

http://download.oracle .com / docs / cd / B19306_01 / server.102 / b14200 / queries006.htm # i2054012

È possibile trovare le altre versioni dei manuali Oracle in linea se la versione è diversa, anche se la sintassi join è probabilmente non è diversa.

Mi pare di ricordare questa sintassi andando via nel passaggio da Oracle 8i a 9i - penso che abbiamo avuto un plugin rospo che ha finito per la conversione di tutto per noi così non abbiamo dovuto sprecare tempo passando attraverso ogni query

Non so di uno strumento per fare automaticamente la conversione, ma anche se ci fosse, si vorrebbe rivedere i suoi cambiamenti uno caso per caso, comunque. Pertanto, non credo che uno strumento che permetterebbe di risparmiare molto tempo.

http://www.dba-oracle.com/oracle_news/2004_2_19_rittman.htm dice:

  

Non c'è alcun miglioramento delle prestazioni o colpire utilizzando ANSI unisce piuttosto che tradizionale si unisce, ma utilizzando join ANSI, le query sono più portabile tra le piattaforme DBMS, e sono un po 'più facile da leggere. Alla fine, però, si è scesi a preferenze personali e mentre c'è vantaggi allo standard ANSI, non c'è bisogno di cambiare se non si desidera.

Inoltre non c'è bisogno di usare uno stile o l'altro in tutto il mondo. È possibile convertire il codice di una query alla volta, con la certezza che essi saranno tutti continuare a lavorare. Lascerei le query come sono, e risolvere da usare ANSI SQL-92 di sintassi nel nuovo codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top