Loading Dockerfile.sh +28 −11 Original line number Diff line number Diff line #!/usr/bin/env bash # # Script d'install d'un serveur, inspiré du Dockerfile. # Script d'install d'un serveur, traduction du Dockerfile. # DIR=$(cd `dirname $0` && pwd) usage() { cat << EOF Script d'install d'un serveur, traduction du Dockerfile. Usage: $0 <version de PHP> EOF exit 0; } [[ -z "$1" ]] && usage ################################################################################################################ PHP_VERSION="$1" APP_DIR=$(cd `dirname $0` && pwd) set -e Loading @@ -18,21 +31,25 @@ apt-get install -y \ export UNICAEN_IMAGE_TMP_DIR=/tmp/docker-unicaen-image git clone https://git.unicaen.fr/open-source/docker/unicaen-image.git ${UNICAEN_IMAGE_TMP_DIR} cd ${UNICAEN_IMAGE_TMP_DIR} source Dockerfile.sh . Dockerfile.sh ${PHP_VERSION} cd ${DIR} cd ${APP_DIR} # NB: Variables d'env positionnées par ${UNICAEN_IMAGE_TMP_DIR}/Dockerfile.sh # APACHE_CONF_DIR=/etc/apache2 \ # PHP_CONF_DIR=/etc/php/7.0 # PHP_CONF_DIR=/etc/php/$1 # Configuration Apache et FPM cp docker/apache-ports.conf ${APACHE_CONF_DIR}/ports.conf cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/ cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/app.conf cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/app-ssl.conf cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/app.conf cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini sed -i -re 's/SetEnv APPLICATION_ENV "(development|test)"/SetEnv APPLICATION_ENV "production"/' \ ${APACHE_CONF_DIR}/sites-available/app-ssl.conf a2ensite sygal-import-ws sygal-import-ws-ssl && \ service php7.0-fpm reload a2ensite app app-ssl && \ service apache2 reload && \ service php${PHP_VERSION}-fpm reload INSTALL.md +60 −47 Original line number Diff line number Diff line # Installation du web service `sygal-import-ws` Installation du web service `sygal-import-ws` ============================================= ## Applicatif Applicatif ---------- ### Première obtention des sources et installation du serveur Sur un serveur Debian Stretch, lancez les commandes suivantes pour obtenir les sources du WS : *NB: la procédure proposée ici part d'un serveur *Debian Stretch* tout nu et couvre l'installation de tous les packages requis.* Si ce n'était pas le cas, merci de le signaler. En `root` sur votre serveur, pour obtenir les sources du WS, lancez l'une des commandes suivantes en fonction du site sur lequel vous lisez la présente page : ```bash git clone https://git.unicaen.fr/open-source/sygal-import-WS.git /var/www/sygal-import-WS # Si vous êtes sur git.unicaen.fr : git clone https://git.unicaen.fr/open-source/sygal-import-ws.git /app # Si vous êtes sur github.com : git clone https://github.com/EsupPortail/sygal-import-ws.git /app ``` *NB: merci de respecter dans un premier temps le choix de `/app` comme répertoire d'installation. Libre à vous une fois que tout fonctionne de changer d'emplacement et de modifier en conséquence les configs nécessaires.* ### Configuration du serveur Ensuite, placez-vous dans le répertoire des sources et jetez un oeil au script `Dockerfile.sh`. Ce script est en quelque sorte l'équivalent du `Dockerfile` du WS traduit en bash. (Vous y verrez que le dépôt git d'une image Docker Unicaen est cloné pour lancer son script `Dockerfile.sh` qui est lui aussi l'équivalent du `Dockerfile` de l'image traduit en bash.) Lancez le script `Dockerfile.sh` : ```bash cd /var/www/sygal-import-WS source Dockerfile.sh cd /app bash Dockerfile.sh 7.0 ``` Ensuite, vérifiez et ajustez si besoin sur votre serveur les fichiers de configs suivants, créés par le script `Dockerfile.sh` : - ${APACHE_CONF_DIR}/ports.conf - ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf - ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf - ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf - ${PHP_CONF_DIR}/fpm/conf.d/ - ${APACHE_CONF_DIR}/sites-available/app.conf - ${APACHE_CONF_DIR}/sites-available/app-ssl.conf - ${PHP_CONF_DIR}/fpm/pool.d/app.conf - ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini NB: Vérifiez dans le script `Dockerfile.sh` que vous venez de lancer mais normalement `APACHE_CONF_DIR=/etc/apache2` et `PHP_CONF_DIR=/etc/php/7.0`. Loading Loading @@ -83,41 +99,24 @@ doivent être complétés puis renommés : - **database.local.php.dist** : qui est utilisé pour la connection à la BDD. - clés `host`, `dbname`, `port`, `user`, `password` : les infos d'accès à la BDD. Une fois ces fichiers complétés, changez leur extension `.php.dist` en `.php`. Une fois ces fichiers complétés, supprimez l'extension `.dist`, ex : ```bash cp -n local.php.dist local.php cp -n database.local.php.dist database.local.php ``` ### Configuration PHP pour le WS Créez/corrigez le fichier de config PHP `/etc/php/7.0/fpm/conf.d/99-sygal-import-WS.ini` comme suit : Si vous êtes sur un serveur de PROD, corrigez les lignes suivantes du fichier de config PHP `/etc/php/7.0/fpm/conf.d/90-app.ini` : date.timezone = Europe/Paris short_open_tag = Off expose_php = Off #display_startup_errors = On #error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE display_errors = Off # NB: ne peut-être supérieur au memory_limit du php.ini memory_limit = 256M ;opcache.error_log=/var/log/php_opcache_error.log ... error_reporting = 0 ... opcache.enable = 1 opcache.memory_consumption = 256 opcache.interned_strings_buffer = 8 opcache.max_wasted_percentage = 5 opcache.max_accelerated_files = 16000 ; http://php.net/manual/en/opcache.configuration.php#ini.opcache.revalidate-freq ; defaults to zend opcache checking every 180 seconds for PHP file changes ; set to zero to check every second if you are doing alot of frequent ; php file edits/developer work ; opcache.revalidate_freq=0 opcache.revalidate_freq = 180 opcache.fast_shutdown = 0 opcache.enable_cli = 0 opcache.save_comments = 1 opcache.enable_file_override = 1 opcache.validate_timestamps = 1 opcache.huge_code_pages = 0 ... xdebug.enable = 0 ### Interface d'admin Apigility Loading @@ -127,16 +126,13 @@ Assurez-vous de bien désactiver le mode développement : composer development-disable ``` Pour passer en mode développement et ouvrir l'accès à cette interface de modification du WS : ```bash composer development-enable ``` ## Base de données Base de données --------------- Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis), ou autre part si c'est possible, à vous de voir. Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis), ou autre part si c'est possible, à vous de voir. En fonction du logiciel de scolarité que votre établissement utilise, intéressez-vous dans le répertoire [`data/sql`](data/sql) à l'un des répertoires suivants : Loading @@ -147,3 +143,20 @@ Chacun des répertoires contient : - Un script pour créer les vues communes à tous les établissements ayant le logiciel de scolarité en question. - Un script pour créer les vues propres à un établissement en particulier. Si votre établissement ne figure pas dans la liste, il faudra écrire les vues adaptées à votre contexte. Réseau ------ Vous devez autoriser le serveur sur lequel est installé le WS à être interrogé par le serveur sur lequel est installé SyGAL. Il est conseillé de restreindre cette autorisation à cette seule adresse IP d'origine. Test ---- Reportez-vous au [README.md](README.md) pour tester l'appel du WS en ligne de commande depuis le serveur sur lequel est installé SyGAL. config/autoload/local.php.dist +0 −5 Original line number Diff line number Diff line Loading @@ -19,12 +19,7 @@ return [ 'authentication' => [ 'adapters' => [ 'basic' => [ 'adapter' => \ZF\MvcAuth\Authentication\HttpAdapter::class, 'options' => [ 'accept_schemes' => [ 0 => 'basic', ], 'realm' => 'api', 'htpasswd' => __DIR__ . '/../users.htpasswd', ], ], Loading data/sql/apogee/01-vues-apogee-communes.sql +260 −370 File changed.Preview size limit exceeded, changes collapsed. Show changes data/sql/apogee/02-vues-apogee-ucn.sql→data/sql/apogee/02-vues-apogee-etab.sql +24 −13 Original line number Diff line number Diff line Loading @@ -6,17 +6,22 @@ -- Web Service d'import de données -- ------------------------------- -- -- Vues Apogée UCN. -- Vues Apogée propre à votre établissement, à personnaliser. -- -- -- Vue fournissant les "variables d'environnement" requis par SyGAL : -- - Adresse mail de l'assistance utilisateur -- - Adresse mail de contact de la BU -- - Adresse mail de contact du bureau des doctorats -- create or replace view SYGAL_VARIABLE_MANU as select 'apogee' as source_id, 'EMAIL_ASSISTANCE' as id, 'EMAIL_ASSISTANCE' as cod_vap, 'Adresse mail de l''assistance utilisateur' as lib_vap, 'assistance-sygal@unicaen.fr' as par_vap, 'assistance-sygal@univ.fr' as par_vap, -----------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual Loading @@ -26,7 +31,7 @@ create or replace view SYGAL_VARIABLE_MANU as 'EMAIL_BU' as id, 'EMAIL_BU' as cod_vap, 'Adresse mail de contact de la BU' as lib_vap, 'scd.theses@unicaen.fr' as par_vap, 'bu@univ.fr' as par_vap, ------------------------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual Loading @@ -36,19 +41,25 @@ create or replace view SYGAL_VARIABLE_MANU as 'EMAIL_BDD' as id, 'EMAIL_BDD' as cod_vap, 'Adresse mail de contact du bureau des doctorats' as lib_vap, 'recherche.doctorat@unicaen.fr' as par_vap, 'bdd@univ.fr' as par_vap, -----------------------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual / -- -- Vue traduisant les codes rôles en usage dans votre établissement vers les codes compris par SyGAL. -- create or replace view SYGAL_ROLE_TR as select 'A', 'A' from dual union select 'B', 'B' from dual union select 'C', 'C' from dual union select 'D', 'D' from dual union select 'K', 'K' from dual union select 'M', 'M' from dual union select 'P', 'P' from dual union select 'R', 'R' from dual with tmp(FROM_COD_ROJ, TO_COD_ROJ) as ( select 'A', 'A' from dual union -- A : Membre absent select 'B', 'B' from dual union -- B : Co-encadrant select 'C', 'C' from dual union -- C : Chef de laboratoire select 'D', 'D' from dual union -- D : Directeur de thèse select 'K', 'K' from dual union -- K : Co-directeur de thèse select 'M', 'M' from dual union -- M : Membre du jury select 'P', 'P' from dual union -- P : Président du jury select 'R', 'R' from dual -- R : Rapporteur du jury ) select * from tmp / Loading
Dockerfile.sh +28 −11 Original line number Diff line number Diff line #!/usr/bin/env bash # # Script d'install d'un serveur, inspiré du Dockerfile. # Script d'install d'un serveur, traduction du Dockerfile. # DIR=$(cd `dirname $0` && pwd) usage() { cat << EOF Script d'install d'un serveur, traduction du Dockerfile. Usage: $0 <version de PHP> EOF exit 0; } [[ -z "$1" ]] && usage ################################################################################################################ PHP_VERSION="$1" APP_DIR=$(cd `dirname $0` && pwd) set -e Loading @@ -18,21 +31,25 @@ apt-get install -y \ export UNICAEN_IMAGE_TMP_DIR=/tmp/docker-unicaen-image git clone https://git.unicaen.fr/open-source/docker/unicaen-image.git ${UNICAEN_IMAGE_TMP_DIR} cd ${UNICAEN_IMAGE_TMP_DIR} source Dockerfile.sh . Dockerfile.sh ${PHP_VERSION} cd ${DIR} cd ${APP_DIR} # NB: Variables d'env positionnées par ${UNICAEN_IMAGE_TMP_DIR}/Dockerfile.sh # APACHE_CONF_DIR=/etc/apache2 \ # PHP_CONF_DIR=/etc/php/7.0 # PHP_CONF_DIR=/etc/php/$1 # Configuration Apache et FPM cp docker/apache-ports.conf ${APACHE_CONF_DIR}/ports.conf cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/ cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/app.conf cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/app-ssl.conf cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/app.conf cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini sed -i -re 's/SetEnv APPLICATION_ENV "(development|test)"/SetEnv APPLICATION_ENV "production"/' \ ${APACHE_CONF_DIR}/sites-available/app-ssl.conf a2ensite sygal-import-ws sygal-import-ws-ssl && \ service php7.0-fpm reload a2ensite app app-ssl && \ service apache2 reload && \ service php${PHP_VERSION}-fpm reload
INSTALL.md +60 −47 Original line number Diff line number Diff line # Installation du web service `sygal-import-ws` Installation du web service `sygal-import-ws` ============================================= ## Applicatif Applicatif ---------- ### Première obtention des sources et installation du serveur Sur un serveur Debian Stretch, lancez les commandes suivantes pour obtenir les sources du WS : *NB: la procédure proposée ici part d'un serveur *Debian Stretch* tout nu et couvre l'installation de tous les packages requis.* Si ce n'était pas le cas, merci de le signaler. En `root` sur votre serveur, pour obtenir les sources du WS, lancez l'une des commandes suivantes en fonction du site sur lequel vous lisez la présente page : ```bash git clone https://git.unicaen.fr/open-source/sygal-import-WS.git /var/www/sygal-import-WS # Si vous êtes sur git.unicaen.fr : git clone https://git.unicaen.fr/open-source/sygal-import-ws.git /app # Si vous êtes sur github.com : git clone https://github.com/EsupPortail/sygal-import-ws.git /app ``` *NB: merci de respecter dans un premier temps le choix de `/app` comme répertoire d'installation. Libre à vous une fois que tout fonctionne de changer d'emplacement et de modifier en conséquence les configs nécessaires.* ### Configuration du serveur Ensuite, placez-vous dans le répertoire des sources et jetez un oeil au script `Dockerfile.sh`. Ce script est en quelque sorte l'équivalent du `Dockerfile` du WS traduit en bash. (Vous y verrez que le dépôt git d'une image Docker Unicaen est cloné pour lancer son script `Dockerfile.sh` qui est lui aussi l'équivalent du `Dockerfile` de l'image traduit en bash.) Lancez le script `Dockerfile.sh` : ```bash cd /var/www/sygal-import-WS source Dockerfile.sh cd /app bash Dockerfile.sh 7.0 ``` Ensuite, vérifiez et ajustez si besoin sur votre serveur les fichiers de configs suivants, créés par le script `Dockerfile.sh` : - ${APACHE_CONF_DIR}/ports.conf - ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf - ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf - ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf - ${PHP_CONF_DIR}/fpm/conf.d/ - ${APACHE_CONF_DIR}/sites-available/app.conf - ${APACHE_CONF_DIR}/sites-available/app-ssl.conf - ${PHP_CONF_DIR}/fpm/pool.d/app.conf - ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini NB: Vérifiez dans le script `Dockerfile.sh` que vous venez de lancer mais normalement `APACHE_CONF_DIR=/etc/apache2` et `PHP_CONF_DIR=/etc/php/7.0`. Loading Loading @@ -83,41 +99,24 @@ doivent être complétés puis renommés : - **database.local.php.dist** : qui est utilisé pour la connection à la BDD. - clés `host`, `dbname`, `port`, `user`, `password` : les infos d'accès à la BDD. Une fois ces fichiers complétés, changez leur extension `.php.dist` en `.php`. Une fois ces fichiers complétés, supprimez l'extension `.dist`, ex : ```bash cp -n local.php.dist local.php cp -n database.local.php.dist database.local.php ``` ### Configuration PHP pour le WS Créez/corrigez le fichier de config PHP `/etc/php/7.0/fpm/conf.d/99-sygal-import-WS.ini` comme suit : Si vous êtes sur un serveur de PROD, corrigez les lignes suivantes du fichier de config PHP `/etc/php/7.0/fpm/conf.d/90-app.ini` : date.timezone = Europe/Paris short_open_tag = Off expose_php = Off #display_startup_errors = On #error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE display_errors = Off # NB: ne peut-être supérieur au memory_limit du php.ini memory_limit = 256M ;opcache.error_log=/var/log/php_opcache_error.log ... error_reporting = 0 ... opcache.enable = 1 opcache.memory_consumption = 256 opcache.interned_strings_buffer = 8 opcache.max_wasted_percentage = 5 opcache.max_accelerated_files = 16000 ; http://php.net/manual/en/opcache.configuration.php#ini.opcache.revalidate-freq ; defaults to zend opcache checking every 180 seconds for PHP file changes ; set to zero to check every second if you are doing alot of frequent ; php file edits/developer work ; opcache.revalidate_freq=0 opcache.revalidate_freq = 180 opcache.fast_shutdown = 0 opcache.enable_cli = 0 opcache.save_comments = 1 opcache.enable_file_override = 1 opcache.validate_timestamps = 1 opcache.huge_code_pages = 0 ... xdebug.enable = 0 ### Interface d'admin Apigility Loading @@ -127,16 +126,13 @@ Assurez-vous de bien désactiver le mode développement : composer development-disable ``` Pour passer en mode développement et ouvrir l'accès à cette interface de modification du WS : ```bash composer development-enable ``` ## Base de données Base de données --------------- Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis), ou autre part si c'est possible, à vous de voir. Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis), ou autre part si c'est possible, à vous de voir. En fonction du logiciel de scolarité que votre établissement utilise, intéressez-vous dans le répertoire [`data/sql`](data/sql) à l'un des répertoires suivants : Loading @@ -147,3 +143,20 @@ Chacun des répertoires contient : - Un script pour créer les vues communes à tous les établissements ayant le logiciel de scolarité en question. - Un script pour créer les vues propres à un établissement en particulier. Si votre établissement ne figure pas dans la liste, il faudra écrire les vues adaptées à votre contexte. Réseau ------ Vous devez autoriser le serveur sur lequel est installé le WS à être interrogé par le serveur sur lequel est installé SyGAL. Il est conseillé de restreindre cette autorisation à cette seule adresse IP d'origine. Test ---- Reportez-vous au [README.md](README.md) pour tester l'appel du WS en ligne de commande depuis le serveur sur lequel est installé SyGAL.
config/autoload/local.php.dist +0 −5 Original line number Diff line number Diff line Loading @@ -19,12 +19,7 @@ return [ 'authentication' => [ 'adapters' => [ 'basic' => [ 'adapter' => \ZF\MvcAuth\Authentication\HttpAdapter::class, 'options' => [ 'accept_schemes' => [ 0 => 'basic', ], 'realm' => 'api', 'htpasswd' => __DIR__ . '/../users.htpasswd', ], ], Loading
data/sql/apogee/01-vues-apogee-communes.sql +260 −370 File changed.Preview size limit exceeded, changes collapsed. Show changes
data/sql/apogee/02-vues-apogee-ucn.sql→data/sql/apogee/02-vues-apogee-etab.sql +24 −13 Original line number Diff line number Diff line Loading @@ -6,17 +6,22 @@ -- Web Service d'import de données -- ------------------------------- -- -- Vues Apogée UCN. -- Vues Apogée propre à votre établissement, à personnaliser. -- -- -- Vue fournissant les "variables d'environnement" requis par SyGAL : -- - Adresse mail de l'assistance utilisateur -- - Adresse mail de contact de la BU -- - Adresse mail de contact du bureau des doctorats -- create or replace view SYGAL_VARIABLE_MANU as select 'apogee' as source_id, 'EMAIL_ASSISTANCE' as id, 'EMAIL_ASSISTANCE' as cod_vap, 'Adresse mail de l''assistance utilisateur' as lib_vap, 'assistance-sygal@unicaen.fr' as par_vap, 'assistance-sygal@univ.fr' as par_vap, -----------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual Loading @@ -26,7 +31,7 @@ create or replace view SYGAL_VARIABLE_MANU as 'EMAIL_BU' as id, 'EMAIL_BU' as cod_vap, 'Adresse mail de contact de la BU' as lib_vap, 'scd.theses@unicaen.fr' as par_vap, 'bu@univ.fr' as par_vap, ------------------------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual Loading @@ -36,19 +41,25 @@ create or replace view SYGAL_VARIABLE_MANU as 'EMAIL_BDD' as id, 'EMAIL_BDD' as cod_vap, 'Adresse mail de contact du bureau des doctorats' as lib_vap, 'recherche.doctorat@unicaen.fr' as par_vap, 'bdd@univ.fr' as par_vap, -----------------------------------------> à personnaliser to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE, to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE from dual / -- -- Vue traduisant les codes rôles en usage dans votre établissement vers les codes compris par SyGAL. -- create or replace view SYGAL_ROLE_TR as select 'A', 'A' from dual union select 'B', 'B' from dual union select 'C', 'C' from dual union select 'D', 'D' from dual union select 'K', 'K' from dual union select 'M', 'M' from dual union select 'P', 'P' from dual union select 'R', 'R' from dual with tmp(FROM_COD_ROJ, TO_COD_ROJ) as ( select 'A', 'A' from dual union -- A : Membre absent select 'B', 'B' from dual union -- B : Co-encadrant select 'C', 'C' from dual union -- C : Chef de laboratoire select 'D', 'D' from dual union -- D : Directeur de thèse select 'K', 'K' from dual union -- K : Co-directeur de thèse select 'M', 'M' from dual union -- M : Membre du jury select 'P', 'P' from dual union -- P : Président du jury select 'R', 'R' from dual -- R : Rapporteur du jury ) select * from tmp /