Kartograph

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , , | Posted on 10:21

Ho trovato questo Sito per caso gironzolando su pinterest


E' un framework basato su SVG (magnifica tecnica) per creare Map Chart  molto belli ed interattivi...
Se vi piacciono le immagini che vedete qui...fateci un salto....kartograph

Perchè utilizzare SQL solo su tabelle? Si può fare molto di più...

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , , | Posted on 16:18

Abbiamo già visto come accedere a dati LDAP come se fossero tabelle.

Ma la stessa cosa si può fare con file di testo, documenti XML o fogli di calcolo.


Come si fa?

Prima di tutto occorre che Oracle sia in grado di leggere il file; per ottenere ciò, occorre che il file sia all'interno del Server che ospita il DBMS (improbabile) o che sia accedibile mediante URI (molto più semplice).

Le istruzioni seguenti consentono di ottenere il contenuto del file come campo Lob (Character Lob in questo caso), oppure come documento XML.

select UriFactory.getUri('http://localhost/mioFile.xml').getXML() from dual
select UriFactory.getUri('http://localhost/mioFile.html').getClob() from dual

Ovviamente questo è solo il primo passo.
Noi vogliamo una vera tabella, con righe e colonne....

Documenti XML

Con i documenti XML è tutto molto semplice...basta utilizzare XQuery.

select t. from
XMLTable('//rows' PASSING UriFactory.getUri('http://localhost/mioFile.xml').getXML()
COLUMNS data_in date PATH '/rows/@data',
id integer PATH '/rows/@id', url varchar2(1000) PATH '/rows/@url') t

Altri file di testo

Il modo più semplice è quello che prevede l'utilizzo delle external tables.
Le external tables di Oracle sono delle istruzioni che permettono di definire la struttura di un file in modo che Oracle sia in grado di leggerne i dati come se fossero all'interno del DB. Ovviamente le prestazioni sono un po' diverse...

Un paio di esempi:

create table txt_table (txt_line varchar2(2000))
 organization external
 (type ORACLE_LOADER default directory my_dir access parameters
  (records delimited by newline
        fields (txt_row char(2000)
     ))
 location ('myfile.xtx')
 );

create table txt_table (nome varchar2(200), data_nascita date )
 organization external
 (type ORACLE_LOADER default directory my_dir access parameters
  (records delimited by newline
        fields (nome char(200), data_nascita CHAR(10) date_format DATE mask "mm/dd/yyyy"
     ))
 location ('myfile.xtx')
 );

create table txt_table (nome varchar2(200), data_nascita date )
 organization external
 (type ORACLE_LOADER default directory my_dir access parameters
  (records delimited by newline
  fields terminated by ','
  missing field values are null
  reject rows with all null
        fields (nome char(200), data_nascita CHAR(10) date_format DATE mask "mm/dd/yyyy"
     ))
 location ('myfile.xtx')
 );

L'unico problema di questa tecnica è che dobbiamo utilizzare file localizzati in folder fisici e non virtuali (accessibili da URI).
Ma anche questo si può fare...

Esempi ulteriori li trovate qui: http://psoug.org/reference/externaltab.html







Funzioni analitiche Oracle per stilare delle classifiche (ranking)

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , | Posted on 13:25

Vi è mai capitato di dover individuare i migliori performer tra il personale di vendita di una azienda?

Come avete fatto?
Probabilmente con una istruzione del tipo:

select rownum, venditore, tot_ordinato from vendite order by tot_ordinato desc

Peccato che, se la classifica andasse suddivisa per regioni o per gruppi di prodotti, questa tecnica non potrebbe più funzionare...


Ecco l'istruzione SQL più efficiente:

SELECT venditore, regione,  dense_rank() over (partition by regione order by tot_ordinato desc) as classifica
from vendite  ORDER BY regione, classifica


Oltre a rank ci sono dense_rank e row_number; ci sono piccole differenze tra loro...

E se poi vi chiedessero di avere le differenze di ordinato tra un venditore ed il precedente (o il successivo, il primo o l'ultimo) in classifica?
Niente paura:

SELECT venditore, regione, dense_rank() over (partition by regione order by tot_ordinato desc) classifica
, LEAD(
tot_ordinato, 1, 0) OVER (partition by regione order by tot_ordinato desc) valore_success_inferiore
, LAG(
tot_ordinato, 1, 0) OVER (partition by regione order by tot_ordinato desc) valore_preced_superiore
from Vendite  order by regione, classifica;


I parametri delle funzioni Lead e Lag sono:
  • tot_ordinato: il campo della tabella o una espressione sql più complessa
  • 1: l'offset dalla riga corrente
  • 0: valore di default se il tot_ordinato è nullo
In pratica i due parametri strani sono quasi sempre 1 e 0.

C'è molto di più di quanto spiegato; ma una volta compresi i meccanismi illustrati nei due post, tutto il resto (se vi serve) è semplice.
Comunque vi abbiamo descritto quello che è utile usare nella maggioranza dei casi.


Oracle avanzato in pillole

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in | Posted on 03:48

Con il database Oracle si possono realizzare molte funzionalità applicative avanzate e performanti, in gran parte sconosciute ai più.
La documentazione esiste, anche in rete, ma spesso non è di agevole lettura, soprattutto per chi non lavora da anni in questo ambito.

Oracle è un bellissimo sistema ma continua da essere, purtroppo, per un elite di esperti.

Il nostro obiettivo è quello di spiegare cosa si possa fare con concetti ed esempi immediati, ma soprattutto in estrema sintesi.
In questa ottica scriveremo una serie di articoli su argomenti interessanti e poco noti in modo conciso e lineare.

Giusto quello che serve per decidere sa valga la pena approfondire ed utilizzare.

Iniziamo a conoscere funzioni analitiche di Oracle

Posted by Alessia, Roberta, Saverio ed Antonella | Posted in , , , | Posted on 22:27

Parliamo di SQL e di aggregazione di dati.
Queste funzioni sono poco conosciute, ma estremamente utili, in quanto potenti e veloci.
Cosa fanno?

Parecchie cose. L'uso più comune è il calcolo di progressivi (Running Totals).
Un esempio? Gli estratti conto bancari con i saldi a fianco.
Se hai un conto un banca li conosci di sicuro.