Service SQL IBM i (AS/400) · Fonction table
QSYS2.PARSE_STATEMENT
Analyser une instruction SQL
Analyse le texte d'une instruction SQL et renvoie les tables, colonnes et autres objets qu'elle référence.
À quoi ça sert
Cette fonction de table décompose une instruction SQL (SQL_STATEMENT) et renvoie les noms qu'elle contient : type de nom (NAME_TYPE, par exemple TABLE), nom, schéma, base relationnelle, colonne, type d'utilisation, position dans le texte et type d'instruction. Les paramètres NAMING ('*SYS' par défaut), DECIMAL_POINT et SQL_STRING_DELIMITER indiquent les conventions du texte analysé.
Elle sert à l'analyse d'impact : dans l'exemple d'IBM, on parcourt les instructions SQL statiques des programmes d'une bibliothèque pour trouver toutes les tables qu'elles référencent. C'est utile avant de renommer ou de supprimer une table.
Résultat réel sur un IBM i 7.5
Ce que nous avons exécuté :
SELECT c.schema, c.name FROM TABLE(QSYS2.PARSE_STATEMENT('SELECT * FROM JOBISQL.CLIENT C JOIN JOBISQL.CLIENT2 D ON C.ID=D.ID')) c WHERE c.name_type = 'TABLE' ORDER BY c.schema, c.name
Ce que l'IBM i a renvoyé le 01/10/2026 (2 lignes au plus) :
| SCHEMA Schéma | NAME Nom |
|---|---|
| JOBISQL | CLIENT |
| JOBISQL | CLIENT2 |
Données anonymisées : les noms de système, de profils, de
bibliothèques, de postes et les adresses IP ont été remplacés. Les objets du schéma
JOBISQL sont des objets de démonstration créés pour ce site.
L'exemple d'IBM
Pour le schéma TOYSTORE, trouver toutes les tables référencées par les instructions SQL statiques de tous les programmes d'application.
-- Description: For schema TOYSTORE, find all tables referenced by
-- static SQL statements by all application programs
WITH program_statements(naming_mode,
dec_point,
string_delim,
stmt_text,
system_program_name,
program_type)
AS (SELECT a.naming,
a.decimal_point,
a.sql_string_delimiter,
b.statement_text,
a.system_program_name,
a.program_type
FROM qsys2.sysprogramstat a INNER JOIN
qsys2.sysprogramstmtstat b ON
a.program_schema = b.program_schema AND
a.program_name = b.program_name AND
a.module_name = b.module_name
WHERE a.program_schema = 'TOYSTORE' AND
b.program_schema = 'TOYSTORE')
SELECT system_program_name,
program_type,
c.schema,
c.name,
stmt_text
FROM program_statements,
TABLE(qsys2.parse_statement(stmt_text, naming_mode,
dec_point, string_delim)) c
WHERE c.name_type = 'TABLE'
ORDER BY c.schema, c.name;
Paramètres
| Paramètre | Type | Par défaut | Signification |
|---|---|---|---|
SQL_STATEMENT |
DOUBLE-BYTE CHAR LARGE OBJECT | obligatoire | Instruction SQL à analyser |
NAMING |
VARCHAR(4) | '*SYS' | Convention de nommage |
DECIMAL_POINT |
VARCHAR(7) | '*PERIOD' | Caractère du séparateur décimal |
SQL_STRING_DELIMITER |
VARCHAR(9) | '*APOSTSQL' | Délimiteur de chaînes SQL |
Colonnes renvoyées (9)
Afficher les 9 colonnes
| Colonne | Type | Signification |
|---|---|---|
NAME_TYPE |
VARCHAR(30) | Type de nom |
NAME |
VARCHAR(128) | Nom |
SCHEMA |
VARCHAR(128) | Schéma |
RDB |
VARCHAR(128) | Base de données relationnelle (RDB) |
COLUMN_NAME |
VARCHAR(128) | Nom de la colonne |
ADDITIONAL_NAME |
VARCHAR(128) | Nom supplémentaire |
USAGE_TYPE |
VARCHAR(17) | Type d'utilisation |
NAME_START_POSITION |
INTEGER | Position de début du nom |
SQL_STATEMENT_TYPE |
VARCHAR(32) | Type de l'instruction SQL |