Skip to main content
 

Estrarre dati da un XML Type

E' spesso utile accedere ai dati contenuti in una vriabile XML TYpe, usando l' SQL come se fossero in una tabella o vista.

XML ha per sua stessa natura una struttura gerarchica. Di conseguenza viene facile pensare ad un file XML come a record di tabelle legate tra loro da relazioni master-detail.

Pensiamo ad un documento XML memorizzato nella colonna XML Type di una tabella Oracle:

<root> 
   <master id ='A'> 
    <info>First Header</info> 
      <detail> 
        <info>Detail 1</info> 
      </detail> 
      <detail> 
        <info>Detail 2</info> 
      </detail> 
   </master> 
   <master id = 'B'> 
      <info>Second Header</info> 
      <detail> 
           <info>Detail 3</info> 
      </detail> 
   </master>
</root>

Creeremo due viste ("dumb_master" e "dumb_detail") connesse da relazione master-detail relationship e popolate dai dati contenuti nell' XML Document della colonna dumb.dumber.

Oracle

Leggi tutto …Estrarre dati da un XML Type

Update basata su variabile record

Questo costrutto aggiorna ogni colonna di un record con i dati contenuti in un variabile difinita con ROWTYPE. Potrebbe quindi innescare lock delle chiavi di una foreign key.

DECLARE
  p_rec  t%ROWTYPE;
BEGIN
  ...
 
  p_rec.column_x := 'AA';
  p_rec.column_y := 'BB';
 
  ...
 
  UPDATE t
  SET ROW = trec
  WHERE column_z = 'CC';
 
  ....
END;

Info taken from http://psoug.org/reference/update.html

Oracle, PL/SQL

All' interno di un trigger, sottomettere PL/SQL DOPO il commit

A volte è necessario seguire del codice PL/SQL all'itnerno di un trigger, e questo pezzo di codice necessita di avere visione delle modifiche apportate ai dalla transazione all'interno della quale è stato lanciato il trigger stesso. Per esempio la sottomissione di una coda di lavoro, oppure il lancio di un report. All'interno dei trigger non è possibile, per ovvi motivi, eseguire un commit. Si otterrebbe l'errore oracle:

ORA-04091: table name is mutating, trigger/function may not see it

La soluzione è usare dbms_job.submit.

Leggi tutto …All' interno di un trigger, sottomettere PL/SQL DOPO il commit