Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Varchar2 a clob

Estas en el tema de Varchar2 a clob en el foro de Oracle en Foros del Web. Hola Tengo el siguiente código de ejemplo: Código: DECLARE v_cadena1 VARCHAR2(2000) := 'PRUEBA'; v_cadena2 VARCHAR2(32676) := ''; v_contador NUMBER := 0; BEGIN LOOP v_cadena2 := ...
  #1 (permalink)  
Antiguo 06/05/2009, 03:16
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 18 años, 3 meses
Puntos: 0
Varchar2 a clob

Hola
Tengo el siguiente código de ejemplo:

Código:
DECLARE
  v_cadena1 VARCHAR2(2000) := 'PRUEBA';
  v_cadena2 VARCHAR2(32676) := '';
  v_contador NUMBER := 0;
BEGIN
  LOOP
    v_cadena2 := v_cadena2 || v_cadena1;
    EXIT WHEN v_contador = 100000;
    v_contador := v_contador + 1;
  END LOOP;
END;
Cuando v_cadena2 supera los 32676 caracteres esto no sirve. He intentando usar CLOB para ello pero no sirve el operador de concatenación. Es decir:

Código:
DECLARE
  v_cadena1 VARCHAR2(2000) := 'PRUEBA';
  v_cadena2 CLOB;
  v_contador NUMBER := 0;
BEGIN
  LOOP
    v_cadena2 := v_cadena2 || v_cadena1;
    EXIT WHEN v_contador = 100000;
    v_contador := v_contador + 1;
  END LOOP;
END;
Con esto me da un error en la línea donde se hace la concatenación.

¿Alguna solución?

Gracias de antemano.
  #2 (permalink)  
Antiguo 06/05/2009, 04:44
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Varchar2 a clob

Para manipular los LOBs debes utilizar el paquete dbms_lob, por ejemplo

Código:
dbms_lob.append( mi_lob, mi_varchar );
Saludos
  #3 (permalink)  
Antiguo 06/05/2009, 04:51
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Varchar2 a clob

Cita:
Iniciado por matanga Ver Mensaje
Para manipular los LOBs debes utilizar el paquete dbms_lob, por ejemplo

Código:
dbms_lob.append( mi_lob, mi_varchar );
Saludos
Gracias por la respuesta.

Creo que eso no se puede hacer. Da el siguiente error:
Error(286,4): PLS-00306: wrong number or types of arguments in call to 'APPEND'

Según he mirado, la función append tiene que tener ambos parámetros como CLOB. Es decir, que no se puede poner un VARCHAR2.

¿Alguna otra solucion?
  #4 (permalink)  
Antiguo 06/05/2009, 05:01
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Varchar2 a clob

Código:
oracle@10G> create table t1 (data clob);

Tabla creada.

oracle@10G> insert into t1 values ('changos');

1 fila creada.

oracle@10G> commit;

Confirmaci¾n terminada.

oracle@10G> declare
  2   texto varchar2(10):='blalblalba';
  3   c clob;
  4  begin
  5   select data into c from t1 where rownum < 2 for update;
  6   dbms_lob.append(c,texto);
  7    update t1 set data = c;
  8  commit;
  9  end;
 10  /

Procedimiento PL/SQL terminado correctamente.
Se puede hacer un append con un varchar, al menos en 10g funciona.

Saludos
  #5 (permalink)  
Antiguo 06/05/2009, 05:08
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Varchar2 a clob

Es que creo que estoy con 8i. Tampoco tengo el TO_CLOB().

  #6 (permalink)  
Antiguo 06/05/2009, 05:23
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Varchar2 a clob

Si, el TO_CLOB es nuevo en 10g, cual es la salida de la siguiente consulta.

Código:
oracle@10G> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Si estás en 8i, mira este ejemplo de la documentación de esa versión http://download-west.oracle.com/docs...p32.htm#738921


Saludos
  #7 (permalink)  
Antiguo 06/05/2009, 05:31
 
Fecha de Ingreso: agosto-2006
Mensajes: 35
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Varchar2 a clob

Me sale esto:

Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
PL/SQL Release 8.1.7.0.0 - Production
CORE 8.1.7.0.0 Production
TNS for 32-bit Windows: Version 8.1.7.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production

Osea, 8i


Voy a leerme eso que me has puesto.

Gracias por todo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:25.