10
votes

Comment écrire une boucle pour un type d'enregistrement dans Oracle

J'ai la déclaration suivante qui compile correctement dans mon colis:

en-tête d'emballage: p> xxx pré>

Corps: p>

ROLE_USER_REC                  MY_PACKAGE.ROLE_USER_TYPE;

SELECT B.USER_ID, B.ROLE INTO ROLE_USER_REC
FROM some_table where user_id like 'M%'


0 commentaires

3 Réponses :


21
votes

Il n'y a rien à boucle.

role_user_type code> définit un seul enregistrement, que vous pouvez accéder via: p> xxx pré>

Votre Sélectionnez ... dans code> échouera dès que plus d'une ligne est renvoyé. P>


Si vous devez stocker plusieurs de ces enregistrements, vous pouvez utiliser Tables imbriquées comme

Type Type Role_user_Tab est Tableau de rôle_User_Type CODE>: P>

Exemple strong>: p>

DECLARE
  TYPE role_user_type IS RECORD (
     ROLE_ID        VARCHAR2(10),
     SUBGROUP       VARCHAR2(10)
  );
  TYPE role_user_tab IS TABLE OF role_user_type;
  role_user_rec role_user_tab;
BEGIN
  SELECT 'A', 'B'
  BULK COLLECT INTO role_user_rec
  FROM dual;
  FOR i IN role_user_rec.FIRST .. role_user_rec.LAST LOOP
    dbms_output.put_line( role_user_rec(i).role_id || ', ' || role_user_rec(i).subgroup );
  END LOOP;
END;


0 commentaires

6
votes

Vous pouvez utiliser un curseur pour boucle:

DECLARE
  CURSOR C IS
SELECT B.USER_ID, B.ROLE 
  FROM some_table 
 where user_id like 'M%';
BEGIN
  FOR role_user_type IN C LOOP
    dbms_output.put_line('User ID: '||role_user_type.user_id);
    etc...
  END LOOP;
END;


0 commentaires

2
votes

Vous pouvez utiliser des curseurs pour ce xxx


0 commentaires