Structure de requête

Chaque colonne d'un jeu de résultats est associée à une variable. Un en-tête de script spécifie l'association entre les colonnes du jeu de résultats et la variable. Les valeurs des enregistrements renvoyés sont stockées dans ces variables, qui sont alors validées comme valeurs d'attribut d'objet.

L'en-tête de script est contenu entre accolades { }. Ces variables sont répertoriées entre crochets, et sont séparées les unes des autres par une virgule. Il existe une colonne pour chaque variable dans l'instruction Select qui suit l'en-tête.

Par exemple :

{OWNER, @OBJTCODE, SCRIPT, @OBJTLABL}
SELECT U.USER_NAME, P.PROC_NAME, P.PROC_DEFN, P.REMARKS
FROM SYSUSERPERMS U,SYSPROCEDURE P 
WHERE [%SCHEMA% ? U.USER_NAME='%SCHEMA%' AND] P.CREATOR=U.USER_ID
ORDER BY U.USER_NAME

La liste des variables possibles correspond à la liste des variables établie dans la section Variables de MPD.

Chaque partie de l'en-tête (séparée par des virgules) est associée aux informations suivantes :

La seule information obligatoire est le nom de variable. Toutes les autres informations sont facultatives. Les mots clés ID et ... (points de suspension) sont mutuellement exclusifs.

Traitement avec des noms de variable

{TABLE ID, ISPKEY ID, CONSTNAME ID, COLUMNS ...}
select
 t.table_name,
 1,
 null,
 c.column_name + ', ',
 c.column_id
from 
 systable t,
 syscolumn c
where
etc..

Dans ce script, l'identifiant est défini comme TABLE + ISKEY+ CONSTNAME.

Dans les lignes de résultat renvoyées par le script SQL, les valeurs du quatrième champ sont concaténées dans le champ COLUMNS tant que ces valeurs d'ID sont identiques.

SQL Result set
Table1,1,null,'col1,'
Table1,1,null,'col2,'
Table1,1,null,'col3,'
Table2,1,null,'col4,'
In PowerDesigner memory
Table1,1,null,'col1,col2,col3'
Table2,1,null,'col4'

Dans l'exemple, COLUMNS va contenir la liste des colonnes séparées par des virgules. PowerAMC va traiter le contenu du champ COLUMNS pour supprimer la dernière virgule.

Traitement avec une table de conversion

La syntaxe insérée immédiatement derrière un champ dans l'en-tête est la suivante :

(SQL value1 = PowerDesigner value1, SQL value2 = PowerDesigner value2, * = PowerDesigner value3)

dans laquelle * représente toutes les autres valeurs.

Par exemple :

{ADT, OWNER, TYPE(25=JAVA , 26=JAVA)}
SELECT t.type_name, u.user_name,  t.domain_id
FROM sysusertype t, sysuserperms u
WHERE [u.user_name = '%SCHEMA%' AND]
(domain_id = 25 OR domain_id = 26) AND
t.creator = u.user_id

Dans cet exemple, lorsque la requête SQL renvoie la valeur 25 ou 26, elle est remplacée par JAVA dans la variable TYPE.