Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérer directement dans un varray PL/SQL

Sujet résolu
    16 mai 2019 à 13:54:18

    Bonjour,

    Je travaille en PL/SQL avec oracle develloper.

    Je cherche un moyen d'insérer des données directement dans un tableau. Ma requête ramène une vingtaine de données.

    Mon code quine fonctionne pas :

    TYPE tableau IS VARRAY (365) OF INTEGER;
    tableau_temp tableau;
    
    
    BEGIN
    
    --on boucle par jour
    for i in 1..(fin - debut)
    loop
    
    select nb_quot into tableau_temp from hor where no=NUMERO and date_mes=to_date('01/01/2019','dd/mm/yyyy') and param=52;
    
    dbms_output.put_line (i);
    
    end loop;

    Pour résumer j'essaie d'insérer dans tableau_temp, 24 données en une seule requête. :colere:

    Quelqu’un a une idée ? :magicien:

    Merci  :ange:

    -
    Edité par fafine 16 mai 2019 à 13:54:38

    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2019 à 14:19:46

      Tu peux regarder du coté de l'instruction BULK

      https://blogs.oracle.com/oraclemagazine/bulk-processing-with-bulk-collect-and-forall

      CREATE OR REPLACE PROCEDURE ta_procedure ([...])
        IS
           TYPE nb_quot_t IS TABLE OF hor.nb_quot%TYPE;
           tableau_temp    nb_quot_t;
           
        BEGIN
         
      	  
      	select nb_quot 
      	BULK COLLECT into tableau_temp 
      	from 
      		hor 
      	where 
      		no=NUMERO 
      	and 
      		date_mes=to_date('01/01/2019','dd/mm/yyyy') 
      	and 
      		param=52;
      
      	  
           FOR indx IN 1 .. tableau_temp.COUNT
           LOOP
            
           END LOOP;
      
        END ta_procedure;



      -
      Edité par florent m 16 mai 2019 à 14:20:13

      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2019 à 14:36:04

        Merci beaucoup, c'est exactement se que je veux faire. J'étais partis sur une mauvaise piste, j'étais entrain de tester les RECORD.

        Et par curiosité si l'on veut enregistrer plusieurs champs: par exemple nb_quot et champ2, c'est possible via les bulk ?

        ;)

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2019 à 9:06:13

          Yep, il faut juste d"finir un type custom dans ton traitement

          Par exemple:

          DECLARE
             TYPE two_cols_rt IS RECORD
             (
                employee_id   employees.employee_id%TYPE,
                salary        employees.salary%TYPE
             );
          
             TYPE employee_info_t IS TABLE OF two_cols_rt;



          • Partager sur Facebook
          • Partager sur Twitter

          Insérer directement dans un varray PL/SQL

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown