Aller au contenu

Service SQL IBM i (AS/400) · Procédure

QSYS2.GENERATE_SQL_OBJECTS

Générer le DDL SQL dans l'ordre de dépendance

Génère le DDL SQL d'une liste d'objets de base de données fournie dans une table, en respectant l'ordre de création imposé par leurs dépendances.

À quoi ça sert

Contrairement à QSYS2.GENERATE_SQL, qui traite des objets désignés par un nom et un type, cette procédure reçoit en entrée une table qui contient la liste des objets à traiter (schéma, nom et type SQL : TABLE, VIEW, INDEX, ALIAS). Le nom de cette table se donne dans SYSTEM_TABLE_NAME et sa bibliothèque dans SYSTEM_TABLE_SCHEMA (par défaut QTEMP).

Le DDL produit est classé dans un ordre qui permet de rejouer le script : une vue arrive après les tables dont elle dépend. C'est l'intérêt principal pour recréer une application complète ailleurs. Le résultat va dans un membre de fichier source (Q_GENSQOBJ de QTEMP par défaut) ou dans un fichier de flux.

Les options de génération sont les mêmes que pour GENERATE_SQL : remplacement, suppression préalable, contraintes, déclencheurs, privilèges, commentaires, libellés, qualification des noms, formats de date et d'heure, etc. L'exemple d'IBM construit la liste des objets d'une bibliothèque à partir du catalogue, puis appelle la procédure avec QUALIFIED_NAME_OPTION => '1'.

Résultat réel sur un IBM i 7.5

Procédure non exécutée sur notre IBM i de test : elle agit sur la configuration du système ou sur d'autres travaux.

L'exemple d'IBM

Générer des instructions DDL ordonnées pour tous les objets fichier de la bibliothèque MYLIB.

-- Description: Generate ordered DDL statements for all file objects in MYLIB 
  -- First create the table to contain the list of objects. 
 CREATE TABLE QTEMP.INORDER (OBJECT_SCHEMA VARCHAR(258),  OBJECT_NAME VARCHAR(258),  SQL_OBJECT_TYPE CHAR(10));
 -- Now populate the table with objects from a schema. Omit system objects. 
 INSERT INTO qtemp.inorder(object_schema, object_name,     sql_object_type)   SELECT 'MYLIB', dbxfil,     CASE       WHEN dbxatr = 'AL' THEN 'ALIAS'       WHEN dbxatr = 'IX' THEN 'INDEX'       WHEN dbxatr IN ('TB', 'MQ', 'PF') THEN 'TABLE'       WHEN dbxatr IN ('VW', 'LF') THEN 'VIEW'        ELSE dbxatr     END   FROM qsys.qadbxfil f   WHERE dbxlb2 = 'MYLIB' AND         dbxatr IN ('AL','IX','TB','MQ','PF','VW','LF') AND         dbxrel = 'Y' AND         dbxlfi NOT LIKE 'QIDCT%' AND         dbxlfi NOT IN ('SYSCHKCST', 'SYSCOLUMNS', 'SYSCST', 'SYSCSTCOL',        'SYSCSTDEP', 'SYSFIELDS', 'SYSINDEXES', 'SYSKEYCST', 'SYSKEYS',        'SYSPACKAGE', 'SYSREFCST', 'SYSTABLEDEP', 'SYSTABLES', 'SYSTRIGCOL',        'SYSTRIGDEP', 'SYSTRIGGERS', 'SYSTRIGUPD', 'SYSVIEWDEP', 'SYSVIEWS'); 
 -- Generate the ordered DDL 
 CALL QSYS2.GENERATE_SQL_OBJECTS(SYSTEM_TABLE_NAME=>'INORDER',  SYSTEM_TABLE_SCHEMA=>'QTEMP',  QUALIFIED_NAME_OPTION=>'1');

Bon à savoir

Dans l'exemple d'IBM, les fichiers système du catalogue (SYSTABLES, SYSCOLUMNS…) sont exclus de la liste. Fais de même, sinon tu génères aussi des définitions de vues du catalogue.

Paramètres

ParamètreTypePar défautSignification
SYSTEM_TABLE_NAME VARCHAR(10) obligatoire Nom système de la table
SYSTEM_TABLE_SCHEMA VARCHAR(10) 'QTEMP' Bibliothèque système de la table
DATABASE_SOURCE_FILE_NAME VARCHAR(10) 'Q_GENSQOBJ' Nom du fichier source de base de données
DATABASE_SOURCE_FILE_LIBRARY_NAME VARCHAR(10) 'QTEMP' Bibliothèque du fichier source de base de données
DATABASE_SOURCE_FILE_MEMBER VARCHAR(10) 'Q_GENSQOBJ' Membre du fichier source de base de données
SEVERITY_LEVEL INTEGER 39 Niveau de gravité
REPLACE_OPTION CHAR(1) '1' Option de remplacement
STATEMENT_FORMATTING_OPTION CHAR(1) '1' Option de mise en forme des instructions
DATE_FORMAT CHAR(3) 'ISO' Format de date
DATE_SEPARATOR CHAR(1) '-' Séparateur de date
TIME_FORMAT CHAR(3) 'ISO' Format d'heure
TIME_SEPARATOR CHAR(1) '.' Séparateur d'heure
NAMING_OPTION CHAR(3) 'SQL' Option de convention de nommage
DECIMAL_POINT CHAR(1) '.' Caractère du séparateur décimal
STANDARDS_OPTION CHAR(1) '0' Option de conformité aux normes SQL
DROP_OPTION CHAR(1) '0' Option de suppression (DROP)
MESSAGE_LEVEL INTEGER 0 Niveau des messages
COMMENT_OPTION CHAR(1) '1' Option de commentaires
LABEL_OPTION CHAR(1) '1' Option de génération des libellés
HEADER_OPTION CHAR(1) '1' Option d'en-tête
TRIGGER_OPTION CHAR(1) '1' Option de génération des déclencheurs
CONSTRAINT_OPTION CHAR(1) '1' Option de contraintes
SYSTEM_NAME_OPTION CHAR(1) '1' Option de nom système
PRIVILEGES_OPTION CHAR(1) '1' Option de génération des privilèges
CCSID_OPTION CHAR(1) '1' Option de CCSID
CREATE_OR_REPLACE_OPTION CHAR(1) '0' Option CREATE OR REPLACE
OBFUSCATE_OPTION CHAR(1) '0' Option d'obfuscation du code généré
ACTIVATE_ROW_AND_COLUMN_ACCESS_CONTROL_OPTION CHAR(1) '1' Option d'activation du contrôle d'accès aux lignes et colonnes
MASK_AND_PERMISSION_OPTION CHAR(1) '1' Option de génération des masques et permissions
QUALIFIED_NAME_OPTION CHAR(1) '0' Option de qualification des noms
ADDITIONAL_INDEX_OPTION CHAR(1) '0' Option d'index supplémentaire
INDEX_INSTEAD_OF_VIEW_OPTION CHAR(1) '0' Option index à la place de la vue
TEMPORAL_OPTION CHAR(1) '0' Option des tables temporelles
SOURCE_STREAM_FILE DOUBLE-BYTE CHAR LARGE OBJECT '' Fichier de flux source
SOURCE_STREAM_FILE_END_OF_LINE VARCHAR(4) 'CRLF' Fin de ligne du fichier de flux source
SOURCE_STREAM_FILE_CCSID INTEGER 0 CCSID du fichier de flux source