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.