menu

arrow_back Comment faire une procédure stockée qui va faire des Insert/update en masse?

par Actif
(360 points) 13 26
dans Base de données
0 votes
Bonjour,

Une application web va nous envoyer des données à stocker dans la base IBM i. Nous allons utiliser dans un premier temps une procédure stockée(en attendant l'arrivée de webservices). Le web va nous envoyer plusieurs enregistrements soit à enregistrer soit à mettre à jour. A quoi doit ressembler la procédure stockée pour fait un gérer plusieurs enregistrements?

Cordialement,

Olivier.

1 Réponse

par Actif
(360 points) 13 26
0 votes

Bonjour, 

Voici ce que j'ai trouvé de mieux, en utilisant le principe des ARRAYS en entrée. Chaque champ est contenu dans un tableau distinct.

set schema = Mabib;
set Path = Mabib;

Drop type uuIdArray;
create type uuIdArray as varchar(32) array[100]; 
Drop type codeArray;
create type  codeArray as varchar(10) array[100]; 
Drop type labelArray;
create type labelArray as varchar(40) array[100]; 
Drop type percentArray;
create type percentArray as Numeric array[100];  
--
--
Create or replace procedure QfdFraisAdditionnels  (
                      in pUUIDBILLING uuIdArray,
                      in pPROPERTYUUID uuIdArray,         
					  in pCOSTSNATURECODE codeArray,      
					  in pCOSTSNATURELABEL labelArray,      
				      in pMEASURECODEUNIT codeArray,      
					  in pMEASURECODELABEL labelArray,    
					  in pMEASURECODEINITIALS codeArray,  
					  in pREPARTITION percentArray,
					  in pProgramName Char(10),
					  in pUserName Char(10)
					  )
Specific QFD006P
LANGUAGE SQL MODIFIES SQL DATA
set option dbgview = *source , output=*print      

--


P1: Begin
DECLARE lLoop SMALLINT DEFAULT 1;
Declare lExist Integer Default 0;
Declare lNombreElementsTableau Integer Default 0;
Set lNombreElementsTableau=Cardinality(pUUIDBILLING);
While ( lLoop <= lNombreElementsTableau) Do


Select 1
  Into lExist
  From "QFC: Frais additionnels"
 Where UuidBilling = pUUIDBILLING[lLoop]
   And costsNatureCode = pCOSTSNATURECODE[lLoop];
   
If lExist = 1
  Then 
  Update "QFC: Frais additionnels"
     Set MEASURECODEUNIT = pMEASURECODEUNIT[lLoop],       
		 MEASURECODELABEL = pMEASURECODELABEL[lLoop],     
		 MEASURECODEINITIALS = pMEASURECODEINITIALS[lLoop],   
		 REPARTITION = pREPARTITION[lLoop],         
		 UPDATEUSER = pUserName,
		 UpdateProgram = pProgramName 
 Where UuidBilling = pUUIDBILLING[lLoop]
   And costsNatureCode = pCOSTSNATURECODE[lLoop];
Else
  Insert into "QFC: Frais additionnels"
	     ( UUIDBILLING,          
	       PROPERTYUUID,         
		   COSTSNATURECODE,      
		   COSTSNATURELABEL,     
		   MEASURECODEUNIT,      
		   MEASURECODELABEL,     
		   MEASURECODEINITIALS,  
		   REPARTITION,          
		   CREATEUSER,
		   CreateProgram)
  Values ( pUUIDBILLING[lLoop],
           pPROPERTYUUID[lLoop],         
		   pCOSTSNATURECODE[lLoop],      
		   pCOSTSNATURELABEL[lLoop],      
           pMEASURECODEUNIT[lLoop],      
		   pMEASURECODELABEL[lLoop],    
		   pMEASURECODEINITIALS[lLoop],  
		   pREPARTITION[lLoop],
		   pUserName,
		   pProgramName);
End If;

Set lExist = 0;

Set lLoop=lLoop+1;
End While; 

End P1;		
		

 

En premier lieu, on crée des types de variables tableau "ARRAY" devant contenir les types de variables que l'on souhaite utiliser.

Puis dans la procédure, on déclare des variables avec les types définis précédemment.

 

Questions liées

0 votes
2 réponses 318 vues
Comment faire un Insert dans une table à partir d'une autre table équivalent à Eval-cor en RPGComment fait-on un INSERT d'une table à partir d'une autre dont les champs ont le même nom sans énumérer tous les champs dans la requête? En RPG, l'équivalent est Eval-c ...
par ibmiiste Confirmé
(1.4k points)
06-Juillet-2018 posée dans Base de données
0 votes
1 réponse 180 vues
SQL UPDATE ne tient pas compte du temps d'attente des enregistrements défini par OVRDBF, pourquoi ?J&#39;ai une requ&ecirc;te de mise &agrave; jour portant sur un fichier de travail (dont aucun enregistrement n&#39;est verrouill&eacute;) filtrant les enregistrements av ...
par Denis Averti
(979 points)
06-Juillet-2018 posée dans Base de données
0 votes
1 réponse 509 vues
Comment fait-on un update d'un champ à partir d'une autre table?J'ai besoin de faire un update sur un champ avec des valeurs venant d'une autre table, quelle est la syntaxe de cette requête? ...
par ibmiiste Confirmé
(1.4k points)
03-Aout-2018 posée dans Base de données
0 votes
2 réponses 2.9K vues
Comment fait-on pour appeler une procédure stockée dans liste de bibliothèque?Bonjour, Comment une application externe peut utiliser une procédure stockée et qu'une liste de bibliothèque particulière lui soit adjointe. Ceci pour que la procédure ...
par ibmiiste Confirmé
(1.4k points)
10-Décembre-2021 posée dans Connexion système
0 votes
2 réponses 205 vues
Comment faire une sélection aléatoire en SQL?Bonjour, J'ai besoin d'un jeu de test selon certain critère et que ce jeu soit extrait de façon aléatoire. Comment fait-on? Cordialement, ...
par ibmiiste Confirmé
(1.4k points)
09-Mars-2020 posée dans Base de données