Au fait, le
	
	EXECUTE IMMEDIATE... INTO..
 n’est utilisé que pour les requêtes ne ramenant qu’une ligne, alors que j'ai besoin de travailler avec un ensemble de lignes, puis les parcourir pour appliquer le filtre d'une manière unitaire.
Mon problème venait de la déclaration du Curseur. J'ai lu dans la documentation que seul le nom de la table ne peut pas être passé via un argument de substitution, et c'était bien mon cas.
Vu que je connais les deux tables qui vont être passées en paramètre, j'ai décidé de créer deux curseurs et travailler avec l'un ou l'autre en fonction de la table recue (IF..Then else-> pas génial je pense).
Concernant le SQL dynamique j'ai essayé la ligne aussi le
	
	fetch selectCursor Bulk collect into contenuColonne;
 mais ça ne marchait pas non plus. Voici mon code jusqu'à maintenant avec lequel j'au toujours de soucis:
	
	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
   | PROCEDURE FiltrageInterne
    (       
     COLONNE Varchar2
     ,NOMTABLE Varchar2
     ) AS
    --PRAGMA AUTONOMOUS_TRANSACTION;     
    v_counter	    		  number:=0;
    v_commit_update      number:=0;
    v_colonneCommande_aux VARCHAR2(4000);
   	v_update_remplace 		VARCHAR2(4000);
    v_tab                 varchar2(100):=NOMTABLE;
    v_col               varchar2(100):=NOMTABLE;
    contenuColonne                 CLOB;
    CURSOR  CursorLotCommandes (LC$columna in varchar2) IS select LC$columna from ax_fop_e_lotdecommandes;
    CURSOR  CursorLotRetour (LC$columna in varchar2) IS select LC$columna from ax_fop_e_lotretour;
 
 
 
    BEGIN    
 
    if (NOMTABLE='AX_FOP_E_LOTDECOMMANDES') then
      DBMS_OUTPUT.PUT_LINE('###LotdeCommandes###');
      open CursorLotCommandes (v_col);
    else 
		DBMS_OUTPUT.PUT_LINE('###LotRetour###');
		open CursorLotRetour(v_col);
    end if;
 
 
 
      loop
 
       if (NOMTABLE='AX_FOP_E_LOTDECOMMANDES') then
        fetch CursorLotCommandes into contenuColonne;
      else fetch CursorLotRetour into contenuColonne;
      end if;
 
 
        --fetch selectCursor Bulk collect into contenuColonne;
 
 
       DBMS_OUTPUT.PUT_LINE(contenuColonne);
        DBMS_OUTPUT.PUT_LINE(DBMS_LOB.getlength(contenuColonne));
        v_commit_update:=v_commit_update+1;
        v_counter:=v_counter+1;
        v_colonneCommande_aux:=DBMS_LOB.SUBSTR(contenuColonne,4000,(4000*v_counter)+1);
 
    ... | 
 Maintenant la variable contenuColonne vaut le nom de table.
						
					
Partager