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

En Oracle, convertir type LONG en CLOB

En Oracle, convertir type LONG en CLOB

Noter ce billet
par , 09/12/2015 à 09h52 (2094 Affichages)
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

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
create table New_table as 
setelct col1, to_lob(col_long)  col2 from La_table

  • Ou le mode d’insertion sous la syntaxe :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Insert into New_table 
setelct col1, to_lob(col_long)  col2 from La_table

  • Ou dans les creations des snapshots sous la syntaxe

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
create table materialized view (ou snapshot) New_MV as 
setelct col1, to_lob(col_long)  col2 from La_table
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 sql : 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;
Exemple de l’exécution :
Base de données locale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select   t.sowner,(z_test('snap$','query_txt',rowid))||'lkmlkmlkmlk',t.vname  from snap$ t;
Base de données distante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select   t.no_da,z_test('gxartida@tech.world','DESIGNAT_ARTICLE',rowid)  from gxartida@tech.world t;
select   t.sowner,(z_test('sys.snap$@tech.world','query_txt',rowid)),t.vname  from sys.snap$@tech.world t;

Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Viadeo Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Twitter Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Google Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Facebook Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Digg Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Delicious Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog MySpace Envoyer le billet « En Oracle, convertir type LONG en CLOB » dans le blog Yahoo

Mis à jour 24/04/2016 à 20h43 par LittleWhite (Coloration code)

Catégories
Programmation

Commentaires