SQL : renommer une zone dans une table

Vous voulez renommer une zone dans un fichier.

C'est impossible par la commande alter Table ... 

Voici une procédure qui le permet :

CREATE PROCEDURE       RNMZONE (               

 IN P_BIBL CHAR (10),                          

 IN P_FILE CHAR (10),                          

 IN P_ZOAV CHAR (10),                          

 IN P_ZOAP CHAR (10) )                         

 LANGUAGE SQL                                  

 SPECIFIC       RNMZONE                        

 NOT DETERMINISTIC                             

 MODIFIES SQL DATA                             

 CALLED ON NULL INPUT                          

  SET OPTION                                   

      ALWBLK = *ALLREAD ,                      

      ALWCPYDTA = *OPTIMIZE ,                  

      COMMIT = *NONE ,                         

      CLOSQLCSR = *ENDMOD ,                    

      DECRESULT = (31, 31, 00) ,               

      DFTRDBCOL = *NONE ,                      

      DYNDFTCOL = *NO ,                        

      DYNUSRPRF = *USER ,                      

      SRTSEQ = *HEX                          

 -- Début du traitement                     

 BEGIN                                      

 --                                         

 -- Déclaration des variables de travail    

 --                                         

    DECLARE W_DBIILN NUMERIC(4) ;           

    DECLARE W_DBITYP CHAR(8) ;              

    DECLARE W_DBINLN NUMERIC(2) ;           

    DECLARE W_DBIHDG CHAR(60) ;  

DECLARE W_SQL CHAR(400) ;          

--                                                

-- Récupération des informations de la zone avant 

-- sur le catalogue système                       

--                                                

   SELECT DBIILN,   DBITYP,   DBINLN,   DBIHDG    

     INTO W_DBIILN, W_DBITYP, W_DBINLN, W_DBIHDG  

     FROM QADBIFLD                                

     WHERE DBILIB=P_BIBL and DBIFIL=P_FILE        

     and DBIFLD=P_ZOAV ;      

               --                                                           

-- Fomatage requête alter table pour créer nouvelle zone     

--                                                           

   SET W_SQL = 'ALTER TABLE ' CONCAT TRIM(P_BIBL) CONCAT     

     '/' CONCAT TRIM(P_FILE) CONCAT ' ADD COLUMN ' CONCAT    

     P_ZOAP CONCAT ' ' CONCAT W_DBITYP CONCAT '(' CONCAT     

     DIGITS(W_DBIILN) CONCAT ') NOT NULL WITH DEFAULT' ;     

   EXECUTE IMMEDIATE W_SQL;                                  

--                                                           

-- Fomatage requête update valeur ancienne zone dans nouvelle

--                                                           

   SET W_SQL = 'UPDATE 'CONCAT TRIM(P_BIBL) CONCAT '/'       

     CONCAT TRIM(P_FILE) CONCAT ' SET ' CONCAT P_ZOAP        

     CONCAT ' = ' CONCAT P_ZOAV ;                            

   EXECUTE IMMEDIATE W_SQL;                                  

--                                                           

-- Fomatage alter table pour suppresion ancienne zone        

--                                                           

-- Message i à répondre                                      

--        

   SET W_SQL = 'ALTER TABLE ' CONCAT TRIM(P_BIBL) CONCAT 

    '/' CONCAT TRIM(P_FILE) CONCAT ' DROP COLUMN ' CONCAT

    P_ZOAV CONCAT ' CASCADE' ;                           

   EXECUTE IMMEDIATE W_SQL;                              

END ;  

Remarques :

4 paramètres (bib,fichier,zoneavant,zoneaprès)   

Vous affectez le niveau de format, attention au programme RPG !
Mais plus embêtant, vous changez l'ordre des zones ce qui posera un problème sur vos insert 
Si vous voulez garder l'ordre des zones, vous serez obligé de créer un nouveau fichier puis de récupérer les données en 2 fois par SQL ou en une fois avec un cpyf *nochk