| 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 !
|