Friday 27 April 2012

CLOB Oracle




CLOB ORACLE


cette procédure vous permettra de parser un contenu clob de type script SQL

Ensuite, elle va éxécuter le contenu SQL, par le bias du

package DBMS_SQL. On peut aussi subsitutuer le contenu du clob en un

ensemble d'instruction et utilisé : EXECUTE IMMEDIATE.

dans cette exemple, je vous montre la première option.




 

declare
    v_sql  CLOB;
     v_num        NUMBER := 0;
    v_upperbound NUMBER;
      v_sql        DBMS_SQL.VARCHAR2S;
      v_cur        INTEGER;
      v_ret        NUMBER;
    begin
     -- Build a very large SQL statement in the CLOB
    LOOP
    IF  v_num = 0 THEN
         v_sql := 'CREATE VIEW vw_tmp AS SELECT ''le nombre de ligne est : 
'||to_char(v_num,'fm0999999')||''' as col1 FROM DUAL'; 
ELSE
         v_sql := v_sql || ' UNION ALL SELECT ''Le nombre de ligne est :
'||to_char(v_num,'fm0999999')||''' as col1 FROM DUAL';
 END IF;
      v_num := v_num + 1;
       EXIT WHEN DBMS_LOB.GETLENGTH(v_sql) > 40000 OR v_num > 800;
     END LOOP;
    DBMS_OUTPUT.PUT_LINE('Length:'||DBMS_LOB.GETLENGTH(v_sql));
     DBMS_OUTPUT.PUT_LINE('Num:'||v_num);
     -- décomposer le clob en bloc de 256 caractères et les mètres dans un tableau VARCHAR2S
    
     v_upperbound := CEIL(DBMS_LOB.GETLENGTH(v_sql)/256);
     FOR i IN 1..v_upperbound
     LOOP
       v_sql(i) := DBMS_LOB.SUBSTR(v_sql,256 -- amount
                                        	  ,((i-1)*256)+1 -- offset
                                  );
     END LOOP;
     --
     --Parsé puis éxécuter le script sql
     v_cur := DBMS_SQL.OPEN_CURSOR;
     DBMS_SQL.PARSE(v_cur, v_sql, 1, v_upperbound, FALSE, DBMS_SQL.NATIVE);
     v_ret := DBMS_SQL.EXECUTE(v_cur);
     DBMS_OUTPUT.PUT_LINE('View Created');
  end;