IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

En Oracle, convertir type LONG en CLOB

D'après mon expérience modeste, de plus d'une décennie, dans le développement sous PL/SQL et l'administration de base de données Oracle, je trouve que le type LONG est difficile à le manipuler, surtout en termes de conversion vers les types « LOB », ainsi de création de snapshot...
Je vous présente cet article qui expose une astuce sur la conversion de type LONG en type CLOB, et dans la même base de données, et dans une base de données distante.
La seul fonction que la trouve utile, c'est bien la fonction TO_LOB, mais cette fonction on ne peut être utilisée que dans :

  • Le mode de création d'une table sous la syntaxe



  • Ou le mode d’insertion sous la syntaxe :



  • Ou dans les creations des snapshots sous la syntaxe


Ces trois méthodes fonctionnent si on est dans une base de données locale. Autrement dit, ça ne marche pas si on est dans base de données distante. Et en plus, la seule fonction qu’on peut l’utiliser dans une interrogation pour faire une conversion est dbms_metadata_util.long2clob qui elle-même ne marche pas si la base de données est distante.
A cet effet, j'ai créé une fonction simple générique qui aide à convertir de type LONG en type CLOB, quel que soit la nature de la base de données, locale ou distante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
create or replace function z_test(p_table varchar2, p_col_long varchar2,p_rowid varchar2) return clob is
  Result long;
begin
execute immediate  'select '|| p_col_long||
 ' from '||p_table||
'  where rowid='''||p_rowid||'''' into Result;
  return(Result);
end;
Exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select   t.sowner,(z_test('sys.snap$@tech.world','query_txt',rowid)),t.vname  from sys.snap$@tech.world t;

islamov2000 n'a aucun billet à afficher.