CALL de procédures …
 
Notifications 
Reti­rer tout

CALL de pro­cé­dures sto­ckées par leur nom de rou­tine et/ou leur nom système

Posts
Uti­li­sa­teurs
Reac­tions
74  Vu
0
Début du sujet

Bon­jour,

En SQL, que faut-il mettre dans la défi­ni­tion d’une pro­cé­dure sto­ckée pour pou­voir l’ap­pe­ler, par un CALL, indif­fé­rem­ment par son nom de rou­tine ou son nom système ?

Edit : 

Ma connexion sur ACS est en NAMING SYSTEM et non pas SQL. Ceci afin d’u­ti­li­ser *LIBL.

Quand je tente d’ap­pe­ler, j’ai une erreur système.


Drop type arrayChar2;
create type arrayChar2 as varchar(2) array[100];

create or replace procedure NQFC004S (
    in    p_uuidPeriod  char(32),
    in    p_coduex      decimal(8, 0),
    in    p_nbatim      arrayChar2,
    in    p_nescal      arrayChar2,
    in    p_etiquette   arrayChar2)
  specific NQFC004S
  language sql
  modifies sql data
  set option dbgview = *source , output=*print

P1: Begin
declare v_compteur smallint default 1;
declare v_nbElement smallint;
declare v_uuidEntrance char(32);
declare v_uuidProperty char(32);
declare v_testExiste smallint;
declare exit handler for sqlstate '75000'
  resignal sqlstate '75000' set message_text='Property not found.';
declare exit handler for sqlstate '75001'
  resignal sqlstate '75001' set message_text='Entrance not found.';

-- On récupère le nombre d'éléments reçus
set v_nbElement = cardinality(p_nescal);

-- On vérifie que l'UE reçue est valide
if not exists (select uidsap
               from BNUCOP where coduex=p_coduex) then
  signal sqlstate '75000';
end if;

-- On vérifie que les entrées reçues sont valides
set v_compteur = 1;
while (v_compteur <= v_nbElement) do
  -- On vérifie que l'UUID existe
  if not exists (select uuid from MIRUUID
                 where (typuuid, coduex, nbatim, nescal) =
                       ('E', p_coduex, p_nbatim[v_compteur],
                        p_nescal[v_compteur])) then
    signal sqlstate '75001';
  end if;

  set v_compteur = v_compteur + 1;
end while;

-- On récupère l'uuid de l'UE
select uidsap into v_uuidProperty from BNUCOP where coduex=p_coduex;

-- On marque toutes les lignes de cette UE pour identifier à la fin celles
--   qui doivent être supprimées
update NQFCBEEP set tprgup = 'TO_DELETE'
  where (biluid, ptyuid) = (p_uuidPeriod, v_uuidProperty);

set v_compteur = 1;
-- On boucle sur les éléments reçus pour les ajouter à NQFCBEEP
while (v_compteur <= v_nbElement) do
  -- On récupère l'uuid de l'entrée
  select uuid into v_uuidEntrance from MIRUUID
    where (typuuid, coduex, nbatim, nescal) =
          ('E', p_coduex, p_nbatim[v_compteur], p_nescal[v_compteur]);

  set v_testExiste = 0;
  --On regarde si l'enregistrement existe déjà
  select 1 into v_testExiste from NQFCBEEP
    where (biluid, ptyuid, entuid) =
          (p_uuidPeriod, v_uuidProperty, v_uuidEntrance);

  if v_testExiste = 0 then
    -- On ajoute l'enregistrement dans NQFCBEEP
    insert into NQFCBEEP (biluid, ptyuid, entuid, cenerj, tprgcr)
      values (p_uuidPeriod, v_uuidProperty, v_uuidEntrance,
              p_etiquette[v_compteur], 'QFC004S');
  else
    -- Mise à jour de NQFCBEEP si l'enregistrement existe
    update NQFCBEEP
      set cenerj = p_etiquette[v_compteur], tprfup = user,
          tprgup = 'QFC004S'
      where (biluid, ptyuid, entuid) =
            (p_uuidPeriod, v_uuidProperty, v_uuidEntrance);
  end if;

  set v_compteur = v_compteur + 1;
end while;

-- On supprime les enregistrements qui n'ont pas été modifiés/créés
delete NQFCBEEP where (biluid, ptyuid, tprgup) =
                     (p_uuidPeriod, v_uuidProperty, 'TO_DELETE');

end P1;  

https://question.ibmiiste.info/?qa=blob&qa_blobid=6844304600138213234

Cor­dia­le­ment, 

Oli­vier.

Éti­quettes du sujet
Share :