Esiste una funzione isNumeric in PLSQL??

Potrebbe sorgere la necessità di dover leggere dei valori solo numerici, memorizzati su di un campo alfanumerico. I motivi per cui si può avere questa necessità possono essere svariati.

Al momento in cui scrivo, una funzione isNumeric o similare non esiste in PLSQL. Come possiamo realizzare questo? Ci viene in aiuto il sito di AskTom, che ci fornisce alcuni spunti.

 

Abbiamo due strade:

 

Funzione Translate….

La funzione Translate può risultare molto utile. Come indicato in questa pagina, la funzione esegue una sostituzione di caratteri basandosi su delle corrispondenze. Di conseguenza, un sistema per ottenere il risultato desiderato, si può usare la seguente istruzione:

replace( translate( <valore>, ‘0123456789’, ‘0000000000’ ), ‘0’, ” )

Spieghiamo il funzionamento: La translate, fondamentalmente, esegue una sostituzione delle cifre numeriche con ‘0’ (zero). La seconda funzione replace, banalmente, elimina lo ‘0’ (zero).

Conseguenza? Se <valore> contiene delle cifre numeriche, queste sono eliminate e viene restituita una stringa vuota. In alternativa, se su <valore> è presente un carattere alfanumerico, questo rimane e viene restituito nella stringa.

.

REGEX – Espressioni Regolari

E’ possibile anche utilizzare le espressioni regolari, per riuscire ad identificare i valori solo numerici. Se la versione di Oracle è la 10g o successive, la funzione REGEXP_LIKE può essere utilizzata. Di seguito un esempio:

 

SELECT col1 FROM t1 WHERE REGEXP_LIKE(col1, ‘[[:digit:]]’);

Basta semplicemente impostare le regole, ed il gioco è fatto.

Conclusioni

Si tratta di due soluzioni più che valide, ma la prima risulta essere molto semplice, veloce, pratica ed usabile in vari contesti. La seconda risulta più pesante.

Advertisements

Creare dei Blog post da Template

Uso dei template….

Atlassian consiglia molto l’uso di template, ma, con grande sorpresa, non è al momento possibile applicarli ai blog post. Di conseguenza, se si volesse creare dei post secondo determinati standard, schema, grafica, immagini, etc; occorre generarli a mano.

Almeno così sembra. 😉

Esiste una richiesta di poter generare i blog post da template. Non solo…. 🙂 Nascosta tra le righe ho trovato le indicazioni di un addon che consente di poter generare un blog post da un template.

Come si può vedere dalla immagine seguente:

si tratta di una Macro che, aggiunta in qualsiasi parte del template, consente di poter trasformare la nuova pagina, generata dal template, in un blog post.

Una volta che la pagina è stata generata, la macro segnala l’operazione e indica che la pagina creata può essere rimossa

 

Conclusioni….

Si tratta di un primo passo molto importante per colmare una delle funzionalità di Confluence, indispensabili per coloro che lo utilizzano quotidianamente. Si tratta comunque di una prima forma embrionale (non è infatti disponibile per la versione onDemand), che necessita di affinamenti e di ulteriori lavori, ma sono sicuro che in breve tempo è destinata a crescere e a diventare parte delle funzionalità standard di Confluence.

 

 

Utilizzare Confluence come Repository di CV

In questo post vedremo un utilizzo diverso di Confluence. Vedremo come lo si può utilizzare come repository di Curriculum aziendali o Curriculum in generale, cercando di sfruttare il più possibile le funzionalità standard o, dove possibile, aggiungendo addon per far si che lo si possa sfruttare al meglio :-).

Sfruttiamo le funzionalità standard

Senza aggiungere addon, sfruttando al massimo le funzioni standard (quindi con la possibilità di poterle utilizzare anche nella versione onDemand), è pensabile di far sfruttare i Personal Space (ovvero gli space generati a livello di utente), in modo che ogni utente si possa creare il proprio CV, costruendo una pagina basata su di un Template opportunamente costruito.

Ogni utente si crea il proprio Personal Space, vi aggiunge una pagina CV, attraverso il Template opportuno, ed il gioco è fatto.  Si rende necessario che i vari utenti assegnino le permission di lettura della pagina CV al gruppo Confluence-Administrator,  in modo da consentire la ricerca e la visualizzazione della pagina agli amministratori e agli utenti dell’ufficio gestione del personale.

La ricerca di personale interno può essere agevolmente fatta attraverso la funzione di ricerca di Confluence.

Vantaggi/Svantaggi

I vantaggi di questa configurazione sono che:

  • Le informazioni del CV sono visibili al solo utente e al gruppo dell’ufficio gestione del personale
  • Soluzione applicabile sia alla versione installata su server locale che su installazione onDemand (no Addon installato)
  • Soluzione molto semplice
  • Incentiva l’uso di Confluence, da parte dei singoli utenti. Il Personal Space può essere usato anche come repository personale dell’utente, per inserire dcumenti vari e tenere un Blog con le proprie attività documentate.

Gli svantaggi sono:

  • Necessità di intervento del singolo utente
  • Non è una soluzione centralizzata

 

Sempre sfruttando le funzionalità standard…

Sempre sfruttando le potenzialità standard, è possibile creare uno Space ad hoc, dedicato alla gestione dei CV del personale, dove memorizzare i vari CV come allegati. Il come organizzare questo space può dipendere da come è organizzata l’azienda. Si può ricostruire l’organizzazione aziendale come pagine nello space ed allegare i CV nelle singole pagine. Questo è un possibile esempio.

I CV possono essere memorizzati in formato PDF o WORD. In questo modo si implementa una gestione centralizzata. L’accesso e l’utilizzo dello space si può limitare ai soli utenti facenti capo all’ufficio personale, agli amministratori e a nessun altro (Oppure fornirla al gruppo dei capi progetto per ricercare gli skills di cui necessitano). Questi ultimi si occuperanno della sola amministrazione dello space. La ricerca può essere sempre eseguita attraverso la funzione di ricerca di Confluence, che consente anche di poter ricercare all’interno dei file.

Vantaggi/Svantaggi

I vantaggi di questa configurazione sono che:

  • Soluzione Centralizzata
  • Tenere la storia dei CV, in quanto Confluence gestisce il versionamento dei documenti
  • Possibilità di poter tenere anche i CV di potenziali candidati e/o aggiungere ulteriori informazioni
  • Possibilità di poter sfruttare meglio Confluence, per poter tracciare il processo di selezione di nuovi candidati

In questa soluzione non ci sono molti svantaggi, in quanto occorre manutenere le varie informazioni ed i vari file all’interno dello space, sfruttando il versionamento dei documenti (Per attivarlo, occorre memorizzare le nuove versioni con lo stesso nome dei file già caricati), manutenere le pagine con le informazioni sui processi di selezione, etc.

Questa potrebbe essere una buona soluzione, abbastanza semplice e di rapida implementazione. Si tratta di arrivare a standardizzare il formato dei CV, della nomenclatura dei file da allegare. Quindi un buon compromesso.

 

Uso di ADDONS…

Esiste anche la possibilità di poter utilizzare degli addons per poter creare dei CV. Possibili soluzioni possono essere implementate attraverso lo User Profile Plugin della Communardo. Si tratta di un plugin che consente di poter estendere le proprietà di un profilo utente. In questo modo si possono aggiungere ulteriori informazioni che, ogni singolo utente potrebbe completare, aggiungendo i propri skills e le proprie competenze.

Esiste poi la possibilità, attraverso le macro che l’addon mette a disposizione, di creare una pagina che riporti una fotografia delle competenze dei vari dipendenti dell’azienda, oltre che a creare degli elenchi telefonici di qualità :-).

 

Al momento questo Addon non è usabile nella versione onDemand di Confluence.

Alterativa possibile a questo addon è il Resume Editor, un addon specifico, che necessita di un proprio database MySQL esterno, sul quale creare i varo CV.

 

Conclusioni

Abbiamo appena visto come poter utilizzare Confluence non come semplice repository di documenti, ma come repository di CV, sfruttando le sole funzionalità base o estendendole con ulteriori addon. Nei prossimi post cercheremo di vedere ulteriori utilizzi.

SQL Connector for Atlassian Confluence onDemand

Accesso a DB Esterni….

In questo post esamineremo un Addon Confluence, al momento ancora in Beta, che consente di poter accedere a database attraverso Atlassian Confluence onDemand. Si tratta di SQL Connector (Al momento in cui scrivo, è ancora in Beta).

Attraverso questo addon è possibile eseguire interrogazioni verso database esterni, a patto che:

  • Il database sia accedibile da remoto;
  • Tipo di RDBMS utilizzabile:
    • Oracle
    • MS Sql Server
    • MySQL
    • Postgresql

Per questo post, ho fatto uso di un DB MySQL, messo a disposizione da un hosting gratuito: db4free. Questo hosting consente, attraverso un semplice form di registrazione, di disporre di un piccolo DB MySQL , ottimo per il test :-).

Una volta definito l’accesso al DB MySQL (vi assicuro molto semplice, che non necessita di alcuna spiegazione supplementare), è possibile definire l’accesso per Confluence, seguendo i seguenti passi:

Configurazione

Una volta installato l’addon, selezionare il Cog menù Addons, e ricercare l’SQL Addon. Quindi selezionare il tasto Configure, come mostrato in figura.

Configure-sql

Si accederà alla pagina di configurazione dell’addon. Questo richiede di configurare un Context, dove poi impostare la stringa di connessione:

DefinizioneContesto-01

 

La definizione di Context richiede di fornire un nome ‘umano’, che sarà poi utilizzato su Confluence, e di una KEY, simile alla definizione di KEY utilizzata da Confluence, quando si definisce uno Space. Una volta salvato, si procede alla definizione della stringa di connessione:

DefinizioneContesto-02

 

Il formato della stringa è quello che si utilizza con il jdbc: jdbc:driver://machine:port/database?<parameter>. Fatto ciò, si specificano UtentePassword per accedere al database specificato.

Al salvataggio, il sistema esegue un test di connessione, verificando tutti i parametri inseriti e, se tutto ok, salva il Context.

Adesso si possono definire le query, che saranno usate da Confluence, per accedere al DB, disegnare grafici, mostrare dati, etc.

queries

Memorizzata la query, si dispone di tutte le informazioni per poter utilizzare i dati del dabatase esterno.

Utilizzo

Ho predisposto una tabella di esempio (example, giusto per usare un pò di fantasia :-D), e ho creato una pagina di prova sul mio Confluence onDemand. Il risultato che si ottiene, utilizzando la macro, che consente di poter impostare i seguenti parametri:

Macro

ovvero impostare il contesto appena definito e la query che interessa. Il risultato è il seguente:

risultato

 

 

Conclusioni

Finalmente è disponibile un sistema per poter eseguire query da poter inserire in dashboard, anche per la versione onDemand, anche se non dispone di tutte le funzionalità dell’addon SQLPlugin, messo a disposizione per la versione Download di Confluence.

Al momento è ancora in beta, ma sono sicuro che a breve disporrà di tutte le funzionalità necessarie a creare dei dashboard interattivi. Non perdetevi i prossimi post.

Scrivere file con Oracle

Oggi tratteremo un argomento molto semplice. Si tratta della gestione dei file da parte di Oracle.

Oracle consente di poter leggere/scrivere dei file attraverso un package standard: UTL_FILE; che mette a disposizione tutti i metodi necessari per poter eseguire qualsiasi operazione sui file.

Una piccola raccomandazione: Prima di poter utilizzare il package, assicurarsi che l’utenza funzionale, cui impostare la stored procedure/package di utilizzo dei file, disponga delle grant di execute per poter usare il package. Se non dispone di tali grant, chiedere all’amministratore del Database di fornirle.

Come prima cosa, occorre indicare ad Oracle dove si intende andare ad eseguire le operazioni di lettura/scrittura dei file. Per far ciò, occorre definire una DIRECTORY, ovvero indicare ad Oracle dove eseguire le varie operazioni. Per far ciò, si utilizza il seguente comando:

CREATE OR REPLACE DIRECTORY TMP_DIR AS ‘<path completo della directory>’;

Attraverso questa istruzione si indica la directory (locale al server dove è installato il DB Oracle), dove sarà possibile eseguire le varie operazioni di lettura/scrittura dei file. E’ bene ribadire che le operazioni di lettura/scrittura sono eseguite sulla macchina locale e non su dei server remoti. Se si ha la necessità di poter scrivere su dei server remoti, occorre disporre di altre procedure, che magari sfruttando il protocollo FTP, possano scrivere i file su server remoti. Package e procedure sono disponibili e saranno trattati in un altro post.

Si segnala altresì che la directory non appartiene ad uno schema specifico. Occorre quindi prestare attenzione al nome della directory da usare, in quanto è univoco per l’intero database.

Una volta che a directory è stata creata, adesso usiamo i metodi del package per scrivere un semplice file:

/*
* Codice di esempio di scrittura di un file
*/

DECLARE

lv_nome_file VARCHAR2(2000);
lv_percorso_file VARCHAR2(2000);
lv_file_id UTL_FILE.file_type;

BEGIN

lv_percorso_file := ‘<directory_definita>’;
lv_nome_file := ‘<nome_file_da_scrivere>;

— Apertura del file
lv_file_id := UTL_FILE.fopen( lv_percorso_file, lv_nome_file, ‘w’ );

— Scrittura della riga nel file
UTL_FILE.put_line(file => lv_file_id , buffer => ‘Questo è un esempio di testo scritto su di un file’ );

— Chiusura del file.
UTL_FILE.fclose(file => lv_file_id );

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘Errore – ‘ || TO_CHAR(SQLCODE) || ‘ – ‘ || SUBSTR(SQLERRM,1,150));
END;

Analogamente, la lettura di un file viene eseguita con un codice similare e sfruttando gli stessi metodi.

/*
* Codice di esempio di lettura di un file
*/

DECLARE
lv_nome_file VARCHAR2(2000);
lv_percorso_file VARCHAR2(2000);
lv_file_id UTL_FILE.file_type;
lv_text VARCHAR2(32767);
BEGIN

lv_percorso_file := ‘<directory_definita>’;
lv_nome_file := ‘<nome_file_da_scrivere>;;

lv_file_id := UTL_FILE.fopen( lv_percorso_file,  lv_nome_file, ‘r’, 32767);

BEGIN

LOOP

UTL_FILE.get_line(lv_file_id, lv_text, 32767);
DBMS_OUTPUT.put_line(‘Line: |’ || lv_text || ‘|’);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;

DBMS_OUTPUT.put_line(‘Line : |’ || lv_text || ‘|’);

UTL_FILE.fclose(lv_file_id);
END;

Come si vede il package è molto semplice e consente di poter eseguire tutte le operazioni di cui si abbisogna senza grandi difficoltà.

URL di riferimento

 

  • Semplice articolo in inglese su UTL_FILE
  • Indicazioni sulle Directory di Oracle sono presenti su questo link e su questa URL.