Describe per DB2 400

Per quanti di voi come me provengono dal mondo di MySQL e si avvicinano ad altri RDBMS, potrebbe essere comodo l'utilizzo del comando "DESCRIBE".

Peccato che DB2 per iSeries, nonostante disponga del suddetto comando, ha bisogno di un utente con particolari premessi di accesso e configurazione, senza contare il fatto che se volessi eseguire questo comando dall'interno di una procedura PHP risulta molto difficile intercettare l'oggetto restituito dal comando SQL Describe.

Ecco due banalissime query che assolvono egregiamente al compito

versione breve:

SELECT
   COLUMN_NAME, DATA_TYPE, LENGTH, IS_NULLABLE, COLUMN_HEADING
FROM
   qsys2.SYSCOLUMNS
WHERE 
   table_schema = 'VOSTRO_SCHEMA' and 
    table_name = 'VOSTRA_TABELLA'

versione estesa:

SELECT 
     DISTINCT C.TABLE_SCHEMA, C.TABLE_NAME, C.COLUMN_NAME,
      C.ORDINAL_POSITION,
      C.DATA_TYPE, C.COLUMN_DEFAULT, C.NULLS ,C.LENGTH, 
      C.SCALE, LEFT(C.IDENTITY,1),
      LEFT(tc.TYPE, 1) AS tabconsttype, k.COLSEQ

FROM 
     QSYS2.SYSCOLUMNS C
      LEFT JOIN (QSYS2.syskeycst k JOIN QSYS2.SYSCST tc
                     ON (k.TABLE_SCHEMA = tc.TABLE_SCHEMA
                       AND k.TABLE_NAME = tc.TABLE_NAME
                       AND LEFT(tc.type,1) = 'P'))                  
                     ON (C.TABLE_SCHEMA = k.TABLE_SCHEMA
                        AND C.TABLE_NAME = k.TABLE_NAME
                        AND C.COLUMN_NAME = k.COLUMN_NAME)
 
WHERE 
     UPPER(C.TABLE_NAME) = 'vostra_tabella'
                 AND UPPER(C.TABLE_SCHEMA) = 'vostro_schema'
 
ORDER BY C.ORDINAL_POSITION 
FOR FETCH ONLY

Commenti

Log in o crea un account utente per inviare un commento.

eZ Publish™ copyright © 1999-2012 eZ Systems AS