Tipo Boolean in Oracle – Una piccola digressione

Due parole sul tipo Boolean

In questo post andremo ad affrontare un argomento particolare: parleremo di questo tipo Boolean sotto Oracle.

Esiste il tipo Boolean?

Oracle mette a disposizione il tipo Boolean, ma occorre tenere conto di queste precisazioni:

  • NON E’ usabile nella definizione dei campi della tabella.
  • PUO’ essere usato nel PLSQL.

Se vogliamo utilizzarlo nella definizione di una tabella, come suggerito da Tom Kyle, conviene sostituirlo con il tipo CHAR(1), che presenta le stesse caratteristiche, come mostrato di seguito:

flag char(1) check (flag in ( 'Y', 'N' )),

Il risultato è il medesimo.

Una precisazione

Anche se esiste come datatype, non è possibile usarlo ovunque. PL-SQL ha le sue regole e chi lo usa deve mettersi in testa che si devono seguire. Non si può pretendere che, se altri linguaggi (quali ad es. JAVA) lo consentono, PL-SQL si deve adeguare.

 

Conclusione

Abbiamo visto un piccolo tassello, ma di grande importanza. Questo ci ricorda che ogni linguaggio ha le sue regole e i suoi ambiti di applicazione. Dobbiamo tenerne presente sempre.




Esportazione dati via SQLPLUS

Un suggerimento

In questo post, andremo a vedere un piccolo trucchetto che ho usato per poter esportare dei dati, sopratutto quando si tratta di esportare dati di una certa mole.

 

Andiamo nel dettaglio

L’idea è di fare uso di SQLPLUS, che si presta bene a questo genere di lavori. sfruttando le sue capacità. In particolare ci appoggiamo alla possibilità di poter inviare su file il risultato della esecuzione della query. Stiamo parlando del comando: SPOOL;

 

 

Andiamo nel dettaglio e vediamo come fare.

Una volta definita la query, con tutti i dati che sono necessari. Quindi componiamo la query come segue:

Select <campo1> || <campo2> || ..... || <campon> from .....

oppure come

Select <campo1> || <delimitatore> || <campo2> || <delimitatore> ||  ..... || <campon> from .....

a seconda che si voglia avere una estrazione dove i campi sono a lunghezza fissa (primo caso) o con delimitatore (secondo caso).

A questo punto, vediamo come procedere per avere l’estrazione vera e propria.

Attiviamo SQLPLUS, da riga di comando:

sqlplus <utente>/<password>@<dbsid>

Quindi forniamo la sequenza di comandi:

set heading off
set pagesize 0
set linesize 200
set feedback off
Spool on
Spool <file_destinazione>.txt
<scriviamo la Query, mettendo il ';' finale >
Spool off <da lanciare al termine della esecuzione della query>

sqlplus01

La precedente figura da una idea per capire come procedere. Ovviamente mi sono limitato a eseguire una query di esempio per mostrare il funzionamento.

Conclusioni

Abbiamo un sistema molto semplice per eseguire delle estrazioni dati molto semplici. Il metodo è automatizzabile, creando degli script ad hoc, per semplificarci ulteriormente la vita :-).




Creare una funzione split con plsql

Funzione SPLIT in PL-SQL

Riporto un sistema molto semplice per realizzare una funzione SPLIT in PL-SQL. Si tratta di una procedura che ho trovato in questo blog.

Si tratta di una funzione che, data una stringa con separatori, restityuisce l’elemento i-esimo.

create or replace function get_token(
   the_list  varchar2,
   the_index number,
   delim     varchar2:= ','
)
   return varchar2 is
   start_pos number;
   end_pos   number;
begin

   if the_index = 1 then
       start_pos := 1;
   else
       start_pos := instr(the_list, delim, 1, the_index - 1);
       if start_pos = 0 then 
          return null;
       else
           start_pos := start_pos + length(delim);
       end if;
   end if;

   end_pos := instr(the_list, delim, start_pos, 1);

   if end_pos = 0 then
       return substr(the_list, start_pos);
   else
       return substr(the_list, start_pos, end_pos - start_pos);
   end if;

end get_token;
/

Si tratta di una funzione molto semplice. Il risultato è il seguente:

select
   get_token('foo,bar,baz',1), -- 'foo'
   get_token('foo,bar,baz',3), -- 'baz'
   --
   get_token('a,,b',2),        -- '' (null)
   get_token('a,,b',3),        -- 'b'
   --
   get_token('a|b|c',2,'|'),   -- 'b'
   get_token('a|b|c',4,'|')    -- '' (null)
from
   dual

Punti di attenzione

  • L’indice parte da 1 e non da 0
  • Se per l’indice specificato, non è presente alcun valore, allora non viene restituito alcun valore
  • Se si fornisce un indice che non esiste (es. la stringa è formata da 3 elementi e si richiede il 4 elemento), allora anche in questo caso, la funzione non restituisce nulla.

 

Suggerimenti

Potrebbe tornare utile far restituire una stringa ad hoc, qualora non venga fornito un indice non esistente nella stringa, sostituendo il return null; con return ‘-1’; in modo da distinguere la situazione in cui non venga restituito un valore da l’aver richiesto un indice non esistente.

 

 




Creare delle FORM in Confluence – 2

Continuiamo ad approfondire l’argomento FORM in Confluence, iniziato con il seguente post. in cui abbiamo dato una prima occhiata ad un addon che consente di poter inserire delle FORM in Confluence.

Nel corso di questo post, faremo in primo utilizzo su strada dell’addon, vedremo come funziona, come realizza le form e come sono messe a disposizione degli utenti.

 

Passo uno – Da dove cominciamo?

Una volta installato l’addon nel nostro ambiente di test, il primo passo è quello di capire che cosa mette a disposizione. Basta semplicemente richiamare le macro per capire che cosa mette a disposizione:

Macro

La composizione di una form avviene impostando, in maniera opportuna, le varie macro che sono messe a disposizione. Iniziamo impostando una semplice form, che inserisce 4 campi:

  • Campo Testo
  • Campo Numerico
  • Campo Listdown (combo da dove è possibile selezionare dei valori).
  • Campo Immagine

Il primo passo è aggiungere la macro CONFIFORMS FORM. Si tratta del contenitore principale della form. Una agevole e standard autocomposizione, consente di poter impostare i primi parametri, ovvero il nome della form, L’etichetta del tasto di registrazione dei dati, quale messaggio deve essere visualizzato alla memorizzazione del dato, etc.

Macro-form

 

Una volta fatto ciò, occorre definire il tasto di registrazione, sempre attraverso una opportuna macro CONFIFORMS REGISTRATION CONTROL. Come mostrato in figura:

Macro-register

 

Anche in questo caso basta seguire l’autocomposizione ed impostare pochi semplici parametri per arrivare a configurare il componente. In particolare, basta semplicemente indicare quale form fare riferimento (precedente macro), il nome della pagina cui fa riferimento la form, etichetta del bottone, etc.

Fatto ciò, possiamo iniziare a definire i campi che comporranno la form stessa. La macro CONFIFORMS FIELD DEFINITION, come mostrato nella seguente figura, la solita autocomposizione consente di definire le caratteristiche del campo:

Macro-Field

I tipi di campo che sono messi a disposizione sono i seguenti:

Macro-tipocampi

che come si può vedere non sono affatto pochi. Ci si può sbizzarrire nel realizzare le form che meglio si vuole. Il risultato finale della definizione dei campi sarà cosi visibile, prima di salvare la Form:

Macro-definition-final

Salviamo la pagina e adesso vediamo il risultato finale:

Form-Visibile

Selezioniamo il tasto Show Form (Si tratta del tasto che viene generato dalla macro CONFIFORMS REGISTRATION CONTROL, precedentemente definita. Per meglio evidenziarlo, ho impostato la label Show Form, in modo da renderla maggiormente visibile. A questo punto viene visualizzata la FORM vera e propria, dove è possibile inserire i dati veri e propri:

Form

A questo punto inseriamo i dati e selezioniamo il tasto ADD. Il risultato sarà il seguente:

Form-record-salvato

Ovvero il messaggio che avviamo parametrizzato in precedenza.

 

Come vediamo i dati?

Abbiamo visto come sono memorizzati i dati. Ma adesso, come li visioniamo/usiamo? Semplice. Selezioniamo il tasto admin(bboard), posto a fianco del taso Show Form.  Il risultato è il seguente.

Form-gestione-record

una agevole griglia dove è possibile vedere tutti i dati inseriti. Attraverso questa griglia è possibile intervenire direttamente sui dati, manipolarli (Tasto EDIT), cancellarli (Delete), eseguire delle ricerche (textbox Search posta in altro).

 

Conclusioni

Abbiamo visto in questo post come poter impostare una semplice form, con pochi dati. Abbiamo visto come è facile realizzare una form con pochi semplici click, impostando tutti i parametri che, attraverso le semplici composizioni, è molto semplice gestire, senza che sia necessario possedere conoscenze specifiche.

Abbiamo visto come è possibile visualizzare e gestire i dati, attraverso una agevole griglia e come, sempre con pochi click del mouse, sia possibile gestire queste infomazioni

 

Prossimi passi

Nei prossimi post, vedremo un esempio un pò più complesso e verificheremo anche come l’addon si comporta con un numero di record molto alto, come memorizza i dati e come potrebbe essere possibile (ipotesi di lavoro) riportarli su altri sistemi.




Numero massimo di JOB che possono essere eseguiti sotto Oracle

Sarà comunicato a molti che, lanciando dei Jobs, questi non venissero eseguiti. Nessuna indicazione, nessun failure, niente di niente. Quindi? che cosa causa il problema?

Semplice. Oracle imposta un numero massimo di JOB che possono essere eseguiti. Se si vuole eseguire un numero maggiore, occorre controllare un parametro:

JOB_QUEUE_PROCESSES

Eseguendo la query:

Select * from v$parameter
where name like ‘%job%’

è possibile visionare il valore impostato.

La modifica del valore viene eseguita attraverso una ALTER SYSTEM, come mostrato di seguito.

alter system set job_queue_processes=10

Potete trovare un pò di informazioni aggiuntive nel seguente link.

Una piccola annotazione. Per poter eseguire l’istruzione di Alter System, occorre che l’utenza disponga delle corrispondenti grant. Fare riferimento al seguente link per ulteriori delucidazioni




Come realizzare la funzione di SLEEP in PLSQL

In alcune circostanze, occorre impostare dei ritardi nella procedura che deve essere eseguita. Fino a qualche tempo fa avevo risolto attraverso un ciclo, eseguito un tot di volte, in modo da simulare un ritardo.

Consultando il prolifico sito di Ask Tom, ho scoperto che esiste una funzione che realizza il tutto. Si tratta di:

DBMS_LOCK.SLEEP(<numero di secondi>)