Inserire record solo se non presenti tramite un solo prepared statement

In un bellissimo articolo su IT Jungle ho trovato un interessante trucco. Il problema è quello di inserire i dati in una tabella, solo nel caso non esista già una chiave uguale, utilizzando un solo prepared statement. Ecco la soluzione ;-)

 
INSERT INTO myTable
(KEY, code, name)
SELECT Cast(? AS Int),
       Cast(? AS VarChar(30)),
       Cast(? AS Char(10))
  FROM SYSIBM.SysDummy1
 WHERE NOT EXISTS
    (SELECT 1
       FROM myTable
      WHERE KEY=?)

con il relativo codice Java che ne fa uso:

 
Connection conn=DriverManager.getConnection("jdbc:as400://myas400;naming=sql","user","pwd");
String sql="Insert Into myLib.myTable (key, code, name) " +
  "Select Cast(? As Int)," +
  "       Cast(? As VarChar(30))," +
  "       Cast(? As Char(10))" +
  "  From SysIBM.SysDummy1 " +
  " Where Not Exists " +
  " (Select * " +
  "    From myLib.myTable " +
  "   Where key=?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1, 3);                // Column 1
ps.setString(2, "Test It");   // Column 2
ps.setFloat(3,"Fun");         // Column 3
ps.setInt(4, 3);               // Where Clause
ps.execute();                  // Run the statement
ps.close();
conn.close();

Quanta RAM è installata su un AS400 - System i

Per verificare la quantità di memoria RAM installata su AS400, andare al menù HARDWARE con il comando
GO HARDWARE
quindi utilizzare la chiave

4. Gestione delle risorse del processore

Il che equivale al comando

WRKHDWRSC *PRC

La RAM è rappresentata dalle ultime righe, simili a

MS01 30D2 Operativo Scheda memoria princi
MS02 30D2 Operativo Scheda memoria princi
MS03 30D2 Operativo Scheda memoria princi
MS04 30D2 Operativo Scheda memoria princi

L'opzione 7 a fianco di ogni riga mostra la dimensione del modulo di memoria installato.

Novità V6R1: indici SQL derivati

Una dei piccoli ma significativi miglioramenti del rilascio V6R1 di OS400 (IBM i), è la possibilità di creare indici non solo su campi di database, ma anche sul risultato di operazioni. Tali indici possono essere sfruttati sia dal motore di ottimizzazione (in particolare dal nuovo SQE, ma in parte anche da CQE) per migliorere le prestazioni delle query.
Vediamo acluni esempi.

 
CREATE INDEX TOT_TEMPI ON Lavorazioni (TLavoro + TAttrezzaggio)
 
CREATE INDEX NomeCogn ON Dipendenti (CONCAT(CONCAT(Nome,’ ‘), Cognome))
 

Il vantaggio maggiore si può però ottenere nel rendere le ricerche case-insensitive:

 
SELECT * FROM Articoli
  WHERE UPPER(Descrizione) = ‘TAVOLO’
 
CREATE INDEX DescrUpp ON Articoli(UPPER(Descrizione))
 

Disattivazione del mirroring su AS400

I modelli più piccoli di AS400 consegnati negli ultimi hanni dispongono di due dischi configurati in RAID 0 (grazie a Consulente EDP per la correzione) RAID 1 (mirroring). Ciò, se da un lato aumenta l'affidabilità del sistema, dall'altro ne diminuisce ovviamente la capienza ed ha anche un influenza negativa sulle prestazioni. Come è noto, infatti, AS400 cerca quando è possibile di parallelizzare l'accesso fisico ai dati, distribuendo le tabelle di database su tutti i dischi di cui dispone, ottimizzando gli spostamenti dei braccini delle unità.
In certe situazioni risulta pertanto consigliabile rinunciare alla protezione del mirroring per ottenere una maggiore velocità del database.
Per disattivare la protezione del mirroring procedere così.
Continue reading ‘Disattivazione del mirroring su AS400’ »

Evento IBM “Power for developers”

Ieri ho partecipato all'evento Power for developers presso la sede IBM di Milano, una breve presentazione delle novità del mondo AS400 - iSeries - System i rivolte agli sviluppatori. Il mio giudizio sia sull'evento che sui contenuti non può essere entusiasta.
Continue reading ‘Evento IBM “Power for developers”’ »

Un diverso application server su AS400

Forse non tutti sanno che, a partire dal V5R4, è disponibile su AS400 - iSeries un application server diveso da Tomcat e dal tristemente noto Websphere (per gli amici WebPallaAlPiede).
Si chiama "IBM Integrated Web Application Server for i5/OS", ed è l'application server sfruttato da IBM web query.
In attesa di provarlo, vi rinvio alla documentazione ufficiale IBM.

Migrazione a V6R1

E' in preparazione da parte di IBM un Redbook relativo alla migrazione alla nuova versione di OS/400 V6R1 (detto anche IBM i). Buona lettura ;-)

Come eseguire un comando AS400 tramite JDBC/ODBC

In un precedente post abbiamo visto come eseguire un programma AS400 tramite JDBC/ODBC. Occupiamoci ora di come eseguire un comando tramite questa interfaccia.
Continue reading ‘Come eseguire un comando AS400 tramite JDBC/ODBC’ »

Ma la vogliono smettere con il gioco delle 3 carte?

'Sti guru del marketing (detti anche marchettari) la vogliono smettere con il gioco delle 3 carte con i nomi dei prodotti?

E' recente l'annuncio secondo il quale i5/OS sarà IBM i, ed il System i (ancora non ho digerito 'sta schifezza di nome) diverrà Power System.

Ma ancora non hanno capito che, senza una vera svolta nel software, tutto questo "maquillage" serve solo a confondere i clienti? Pensano veramente che, adesso che hanno fatto questo nuovo giochino con i nomi, riusciremo a vendere più AS400 (che è sempre lui, dai...)?

Poi escono con 'ste scoperte:

"Jarman [IBM's Power Systems software manager] said he believes that BladeCenter S is a good fit for small and medium-sized businesses (SMBs) that want to run Power-based and x86 blades in the same chassis without connecting to an external storage area network (SAN). "

E un bel chissenefrega non ce lo vogliamo mettere?

Utenti e password per STRSST e DST

Come abbiamo detto, l'utente di collegamento da utililizzare con il comando STRSST (Start System Service Tools) e DST (Dedicated System Tools) è QSECOFR, ma la sua password può essere differente da quella del normale utente QSECOFR. Se non si conosce tale password, è possibile, collegandosi come normale QSECOFR, ripristinarla al valore di default tramite il comando: CHGDSTPWD *DEFAULT.
Continue reading ‘Utenti e password per STRSST e DST’ »