Appel d’une requête SQL dans une maquette d’édition

Les procédures SQL PROC1 et PROC2

Attention

Pour les accès/màj dans la base de données de l’ERP, utiliser maintenant ISQL (voir Maquettage_Editions). Idem pour lancer une procédure SQL (PL-SQL).

Les instructions maquettes PROC1 et PROC2 peuvent cependant servir pour accéder à une autre base de données, ou lancer une procédure Shell ou Dos.

Dans le paramétrage des maquettes, il existe une solution pour récupérer des informations d'une ou plusieurs tables à partir d'une requête SQL : PROC2.

Il est également possible de modifier des données dans une ou plusieurs tables via une autre procédure SQL : PROC1.

Le but de la première procédure se justifie dans le cas où les blocs ne contiennent pas l'information souhaitée. Au lieu de passer par une redéfinition totale de la vue via le moteur d’édition, il suffit de créer une procédure SQL qui rapatrie la ou les données à insérer dans la maquette.

Le but de la deuxième est de mettre à jour une ou plusieurs tables à partir d'informations contenues dans la maquette.

Une instruction maquette ISQL vous permet de mettre à jour des données ( requête SQL de type « update ») depuis une maquette d’édition.

Trucs et astuces

Pour garantir de bons temps de réponse, nous vous préconisons fortement de lancer les ordres select par ISQL plutôt que par la solution PROC2.

Précautions d’utilisation

Attention

Selon les capacités de votre système informatique, l'utilisation de PROC1 et PROC2 peut occuper un temps machine non négligeable.

La procédure PROC1 sert uniquement pour la mise à jour de tables.

La procédure PROC2 sert uniquement pour la consultation de tables.

Elles peuvent être utilisées dans toutes les fonctions et maquettes d'ACE.

Les paramètres passés dans les PROC1 et PROC2 doivent être des variables fictives, déclarées et initialisées avant l'appel de la procédure. Le fichier appelé dans les procédures doit être un fichier exécutable de type « .bat » (chmod 777 nom_fichier pour le rendre exécutable sous UNIX, l’extension « .bat » suffit sous NT).

La procédure retourne un code retour qui doit être affecté à une variable fictive (de type numérique) dans le bloc où l'on veut lancer les procédures.

Le nombre des variables qu'il est possible de passer en paramètre est limité à 9.

Attention sous NT, les variables récupérées dans le fichier exécutable doivent être préfixées par un « & » et non un « $ ».

Pour utiliser les requêtes SQL « PROC1 » et « PROC2 » sous WINDOWS, le nom de fichier est soumis avec les paramètres alpha-numériques non entourés des guillemets (caractère "), hormis pour les paramètres alpha-numériques vides.

Il est possible de récupérer en DOS un paramètre entouré de guillemets sans vouloir récupérer les deux caractères ".

Il suffit d’utiliser la syntaxe suivante dans le fichier BAT lancé : %~1 à %~nn

Le paramètre maquette P SEPARATEUR_PARAM_PROC permet d’entourer chaque paramètre alpha-numérique d’un " (aussi sous WINDOWS).

Fonctionnalités

Principes

PROC1

Vbb ~nnn=PROC1("nom du programme exécutable",~nnx,~nny,~nnz).

La maquette lance le programme exécutable et passe en paramètre les variables fictives

~nnx, ~nny, ~nnz.

Le programme exécutable ; nom_fichier.bat contient obligatoirement :

echo set heading off > proc.sql

echo set feedback off >> proc.sql

echo set pagesize 0 >> proc.sql

echo set verify of" >> proc.sql

echo set wrap off >> proc.sql

echo set tab off >> proc.sql

echo set line 120 >> proc.sql

Ensuite il suffit de coller la requête SQL de mise à jour uniquement :

echo update evp set qteperdu = $3 >> proc.sql

echo where codsoc=62 and typeve = '$1' and achvte = 'V' >> proc.sql

echo and numeve = $2; >> proc.sql

echo exit >> proc.sql

sqlplus -s soc1/infor1 @proc.sql > fichier.res

Les zones $1,$2,$3 correspondent aux variables déclarées dans la maquette ~nnx,~nny,~nnz.

Les fichiers proc.sql et fichier.res servent uniquement de fichiers tampon pour l'exécution de la procédure.

PROC2 :

Vbb ~nnn=PROC2("nom du programme exécutable",nom du fichier résultat,~nnx,~nny,~nnz).

La maquette lance le programme exécutable et passe en paramètre les variables fictives

~nnx, ~nny, ~nnz.

Le programme exécutable ; nom_fichier.bat contient obligatoirement :

echo set heading off > proc.sql

echo set feedback off >> proc.sql

echo set pagesize 0 >> proc.sql

echo set verify off >> proc.sql

echo set wrap off >> proc.sql

echo set tab off >> proc.sql

echo set line 120 >> proc.sql

echo select '~101=' || qtecde , '~102=\" ' || codva1 || '\" ' from evp >> proc.sql

echo where codsoc=62 and typeve = 'CDE' and achvte = '$1' >> proc.sql

echo and numeve = $2; >> proc.sql

echo exit >> proc.sql

sqlplus -s soc1/infor1 @proc.sql > fichier.res

Les zones $1,$2,$3 correspondent aux variables déclarées dans la maquette ~nnx,~nny,~nnz.

Attention sous NT la fonction de concaténation || ne fonctionne pas. Il suffit de la remplacer par CONCACT('~101=',qtecde) par exemple.

Les fichiers proc.sql et fichier.res servent uniquement de fichiers tampon pour l'exécution de la procédure.

Les variables fictives ~101 et ~102 doivent être déclarées dans la maquette et seront alimentées à chaque appel de la procédure

Utilisation de “echo off”

En commençant chaque procédure ( PROCx) par la ligne « @echo off », il vous est possible de ne plus diriger les commandes du fichier « .bat » dans le fichier « . log ».

Exemple dun « .bat »

@echo off

echo Test RPH > test-rph.lis

On obtient dans le log (extrait) :

Sans la ligne @echo off

08062005 17:48:20 ***** Produit traité : BR101

E:\ACE>echo Test RPH 1>test-rph.lis

08/06/2005 17:48:20 Fin du traitement de l'édition...

Avec la ligne @echo off

08062005 17:50:30 ***** Produit traité : BR101

08/06/2005 17:50:30 Fin du traitement de l'édition...

Exemples

Exemple de PROC2 :

longueur 60

largeur 132

%CR

V ~001="zzzz.zz"

V ~002=C(16)

V ~003=C(30)

V ~004=C(3)

V ~005="999999999999"

V ~101="zzzzzzzzzz.zz"

V ~102="zzzzzzzzzz.zz"

V10 ~003="fichier.res"

V10 ~004=@002

V10 ~005=@003

V10 ~001=PROC2("ap$maq/testproc2.bat",~003,~004,~005)

%10 evt @003 ~101

%21 @134

V23 ~101=0

%42 Total client : @34 @130 @132 ~101

%41 Total devise : @134 @130 @132 ~101

Exemple de PROC1 :

longueur 60

largeur 132

%CR

V ~001="zzzz.zz"

V ~002=C(16)

V ~003=C(30)

V ~004=C(3)

V ~005="999999999999"

V ~006="9999999999.99"

V ~101="zzzzzzzzzz.zz"

V ~102="zzzzzzzzzz.zz"

V10 ~003="fichier.res"

%CR type d'evenement

V10 ~004=@002

%CR numero d'evenement

V10 ~005=@003

V10 ~005=98

%CR quantite commandee

V10 ~006=10

V10 ~001=PROC1("ap$maq/testproc.bat",~004,~005,~006)

%10 evt @003 ~101

%21 @134

V23 ~101=0

%42 Total client : @34 @130 @132 ~101

%41 Total devise : @134 @130 @132 ~101

On peut également définir un fichier <proc>.bat qui appelle un fichier SQL <proc>.sql.

Exemple :

V10 ~001=PROC2("ap$proc/proc2.bat","fichier.resultat",~002,~003)

Le fichier ap$proc/proc2.bat contient les informations suivantes :

Sqlplus soc1/infor1 @proc2.sql $1 $2

Exit

Le fichier proc2.sql (situé à la racine dans ce cas présent) contient :

set heading off

set feedback off

set pagesize 0

set verify off

set wrap off

set tab off

set line 120

spool fichier.res

select '~150=' || '"' || codemp || '"' from lsk

where codsoc=1 and sigdep='96' and codpro='&1' and numlot='&2';

spool off

exit

Cette fois-ci, on met les paramètres avec des « côtes » et des « & » : '&1', '&2' …

Attention : si on envoi des paramètres de type "char" au proc2.bat, il est obligatoire de les entourer de côte au sein de fichier proc2.bat :

Le même fichier édité précédemment donnera :

Sqlplus soc1/infor1 @proc2.sql '$1' '$2' Exit

Trucs et astuces

Si la redirection du résultat du SQL par la commande shell > pose problème, penser à la solution « spool fichier.res » et « spool off ».

La procédure PROC1 est à utiliser lorsqu’on lance une procédure sans récupérer d’information : généralement des requête de mise à jour, mais on peut aussi alimenter un fichier de travai

La procédure PROC2 est à utiliser lorsqu’on lance une procédure à des fins de récupérer de l’information. La procédure peut cependant contenir des mises à jours.

Utiliser l’instruction oracle « spool fichier.res » et « spool off » lorsque vous combinez plusieurs ordres sql : mise à jour, requête intermédiaire et select destiné au fichier résultat.