Post

Visualizzazione dei post da 2016

Da Colonne a Righe

Immagine
Supponiamo di  avere un elenco di prodotti organizzati per categoria come nell'esempio di seguito. select  PROD_SUBCATEGORY ,  PROD_DESC from  sh.products where PROD_SUBCATEGORY in ('CD-ROM','Camera Media'); Realizziamo un report contenente due righe e due colonne in cui ogni riga contiene la categoria e la descrizione dei prodotti associati. select  prod_subcategory , XMLAGG  (  XMLELEMENT (descrizione, PROD_DESC)) .EXTRAXT ('//text()') as Prodotti from  sh.products where prod_subcategory in ('CD-ROM','Camera Media') group by prod_subcategory ; Per le funzioni XMLAGG e XMLELEMENT andare al post seguente.  link

Funzione XMLELEMENT - XMLAGG

Immagine
XMLELEMENT è una funzione che crea un documento XML. Il primo argomento passato è il nome del Tag che non può essere il nome di una colonna, una espressione  o il valore "null". Il secondo argomento invece è una colonna, una stringa, un numero o una espressione. E s e m p i o select XMLELEMENT( categoria ,PROD_SUBCATEGORY ) as Categoria from  sh.products; Nell'esempio viene generato un xml con Tag CATEGORIA e il nome della categoria come valore.  E' possibile annidare più funzioni XMLELEMENT  per avere oltre la categoria anche la descrizione del prodotto. select XMLELEMENT (prodotto, XMLELEMENT(categoria ,PROD_SUBCATEGORY ), XMLELEMENT (descrizione, PROD_DESC) )as risultato from  sh.products where PROD_SUBCATEGORY ='CD-ROM'; La funzione XMLAGG è una funzione aggregata che prende come input più righe di XML e genera un solo documento XML. Nell'esempio di prima il risultato è una sola riga. select XMLAGG  ( XMLELEME

FLASHBACK QUERY

Immagine
Le operazioni Flashback Query utilizzano gli Undo data per poter visualizzare modifiche fatte ad una tabella (delete, update, insert) in un istante di tempo. Esso restituisce solo dati che hanno subito una commit, pertanto i valori vecchi vengono mantenuti per un tempo determinato da parametro undo retention. Viene utilizzato per - recuperare dati committati per errore - confrontare valori  attuali con quelli passati - correggere errori utente Inoltre è una operazione che può usare un qualsiasi user con i privilegi di flashback e select. E s e m  p i o Sessione#1 select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100;                      update EMP_1 set DEPARTMENT_NAME ='Sales'  where DEPARTMENT_ID = 100; select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100; Sessione#2 select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100; Se la Sessione#1 esegue il commit la Sessione#2 visualizzerà il valore "Sales"

INDEX INVISIBLE

Immagine
Un indice INVISIBLE è un indice che viene ignorato da  Oracle Optimizer  senza esplicitamente impostare il parametro di inizializzazione OPTIMIZER_USE_INVISIBLE_INDEXES a True, a livello di sessione o di sistema (di deafult è False). E' stato introdotto con Oralce 11g  perché precedentemente occorreva rendere l'indice UNUSABLE o dropparlo. S i n t a s s i ALTER INDEX  <nome_indice>   INVISIBLE; ALTER INDEX   <nome_indice>   VISIBLE; CREATE INDEX  [ schema.]<nome_indice>   ON  [schema.]<nome_tabella> (colonna1 [, colonna2…] )   INVISIBLE ; E' utile quando si vuole valutare le performance di una query senza droppare l'indice o renderlo non usabile. Baste rendere l'indice invisibile e verrà ignorato da  Oracle Optimizer . Se il risultato dei test è negativo si procederà a rendere nuovamente visibile l'indice, senza doverlo ricreare. La colonna VISIBILITY della tabella USER_INDEXES indica lo stato di visibilità di un indice. Diver

DATA DICTIONARY

DATA DICTIONARY è un insieme di metadati che contiene informazioni sui nomi e attributi di tutti gli oggetti del database: tabelle, viste, trigger, cluster, index, procedure, funzioni, constraints il nome di tutti gli user compresi i database administrators  lo spazio occupato dagli schema objects privilegi e ruoli di ogni user informazioni di auditing La modifica di un qualsiasi oggetto oracle comporta l'aggiornamento del Dizionario Dati. Il Dizionario Dati appartiene allo schema SYS e al tablespace SYSTEM che è sempre online quando il database è in stato open. Non è possibile accedere direttamente a queste tabelle ma si possono consultare tramite viste. La vista DICTIONARY o DICT è composta da due colonne: TABLE_NAME che contiene il nome delle tabelle e viste e COMMENTS che contiene la descrizione. La vista DICT_COLUMNS contiene invece per ogni tabella e vista il nome delle colonne e la sua descrizione. Le viste del Dizionario Dati hanno tre prefissi e utilizzano

USER_OBJECTS

USER_OBJECTS è una vista del Data Dictionary, schema SYS, che fornisce informazioni sugli oggetti (tabelle, viste,indici, sequence, trigger, procedure, etc) create soltanto dall'user nella sessione in atto.

USER_TAB_PRIVS_MADE

Immagine
USER_TAB_PRIVS_MADE  è una vista del Data Dictionary che visualizza i privilegi sugli oggetti dell'user nella sessione in corso. select GRANTEE,TABLE_NAME,GRANTOR ,PRIVILEGE ,GRANTABLE from USER_TAB_PRIVS_MADE where GRANTEE ='SH' and privilege ='SELECT'; La colonna GRANTOR contiene l'user che concede i privilegi. GRANTEE contiene l'user che riceve i privilegi. GRANTABLE = YES vuol dire che il GRANTEE ha ricevuto i privilegi con l'opzione WITH GRANT OPTION.

USER_SYNONYMS

USER_SYNONYMS è una vista del Data Dictionary, schema SYS, che visualizza i sinonimi privati di un account user. Per visualizzare i sinonimi pubblici usare le viste ALL_SYNONYMS o DBA_SYNONYMS. Solo le utenze con il privilegio SYSDBA o SELECT ANY DICTIONARY possono eseguire query sulle viste DBA_.

LISTA ALFABETICA oracle

Di seguito una semplice procedura in Pl/Sql che crea una tabella di una colonna contenente una lista alfabetica. Compilare la seguente procedura. CREATE OR REPLACE procedure PROC_LISTA_ALFABETICA IS var1 varchar(4); BEGIN var1 :=  'A'; EXECUTE IMMEDIATE 'DROP TABLE LISTA_ALFABETICA'; EXECUTE IMMEDIATE 'CREATE TABLE LISTA_ALFABETICA ( alf varchar(4) )'; while  (ascii(var1) >= ascii('A') and  ascii(var1) <= ascii('Z') ) loop insert into LISTA_ALFABETICA values (  chr( ascii( var1 ) ) ); var1 := chr (ascii(var1) + 1 ); end loop ; commit; END; / Eseguire la procedura con il comando seguente. BEGIN PROC_LISTA_ALFABETICA(); END; /

Funzione ASCII

La funzione ASCII restituisce il codice di tipo NUMBER associato ad un carattere. S i n t a s s i ASCII (  carattere  ) E s e m p i select ASCII('A'), ASCII(1), ASCII('AB') from dual; ASCII('A')   ASCII(1) ASCII('AB') ---------- ---------- -----------         65         49          65 Se sono presenti due caratteri la funziona restituisce il codice associato solo al primo, ignorando il secondo. Utilizzando la funzione CHR è possibile creare una lista di caratteri select CHR( ASCII('A') + 1 ) from dual; CHR(ASCII('A')+1) ----------------- B          

USER_VIEWS

USER_VIEWS è una vista del Dizionario Dati che per ogni user contiene l'informazione del nome delle proprie viste e le query che le definiscono. select view_name, text from USER_VIEWS; La colonna TEXT contiene la query che definisce la vista.

Funzione EXTRACT

Immagine
S i n t a s s i EXTRACT ( parola_chiave FROM espressione ) La funzione EXTRACT estrae da una espressione (ad esempio '02-02-2016 18:20:29') o dal nome di una colonna di tipo date, il valore indicato dalla parola_chiave che può assumere uno dei seguenti valori: YEAR MONTH DAY HOUR MINUTE SECOND TIMEZONE_HOUR TIMEZONE_MINUTE TIMEZONE_REGION TIMEZONE_ABBR E s e m p i o select hire_date ,  EXTRACT (year FROM HIRE_DATE ) as risultato from employees where job_id ='FI_ACCOUNT';