Conseils et meilleures pratiques pour les procédures stockées

Cette section décrit quelques conseils et meilleures pratiques pour les procédures stockées.

Traitement des interruptions Control-C dans les boucles

Si la procédure rencontre une boucle infinie, vous pouvez appuyer sur Control-C pour interrompre la boucle. Cette séquence de touches devrait provoquer une exception (qui n'est pas rattrapable) et donc entraîner l'interruption et le retour de la boucle et de l'appel de procédure.

Traitement des requêtes en boucle

Dans les procédures stockées, il peut y avoir des boucles qui semblent utiliser des requêtes concurrentes pour traiter les résultats. Par exemple, la procédure suivante utilise un SELECT pour recueillir des informations, qui sont ensuite traitées en vue d'une éventuelle action DELETE :
FOR rec in SELECT * from mytable LOOP
  IF rec.type = ‘d’ THEN
     EXECUTE IMMEDIATE ‘DELETE FROM mytable2 WHERE recid = ‘ || rec.id;
  END IF;
END LOOP;

Bien qu'il semble que la requête externe SELECT de la boucle FOR et la requête interne EXECUTE IMMEDIATE s'exécutent en même temps, la requête SELECT se termine et met en cache ses résultats avant que la requête interne ne commence. Ainsi, la suppression d'enregistrements de la table dans la boucle interne n'affecte pas la requête SELECT dans la boucle externe et ne modifie pas ses résultats.

Remarque : bien qu'il soit courant d'exécuter des opérations ligne par ligne, comme dans l'exemple précédent, vous pouvez améliorer considérablement les performances de ces procédures en les concevant de manière à ce qu'elles opèrent sur des ensembles d' enregistrements plutôt que sur des opérations portant sur une seule ligne. Par exemple, si vous transformez l'exemple précédent en l'exemple suivant :
DELETE from mytable2 where recid in (select recid from my table
where type = 'd') ;

Cette procédure peut tirer parti de l'environnement de traitement massivement parallèle (MPP) de Netezza Performance Server pour s'exécuter beaucoup plus rapidement.