Problema sencillo que me trae loco

Jose
20 de Diciembre del 2005
Hola a [email protected],
Os escribo para ver si podéis echarme una mano con un problema aparentemente sencillo: Se trata de comprobar si todas las tablas cuyo nombre empieza por \'BVP\' están llenas o vacías. Para ello he desarrollado el siguiente código:

DECLARE
nombre_tabla VARCHAR2(25);
cantidad NUMBER(10);
v_sql VARCHAR2(300);

CURSOR TABLAS_BVP IS
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE TABLE_NAME LIKE \'BVP%\';
BEGIN
DBMS_OUTPUT.PUT_LINE (\'COMIENZO DEL SCRIPT\');
cantidad:=0;
FOR REGISTRO IN TABLAS_BVP LOOP
v_sql:= (\'SELECT COUNT(*) into cantidad FROM \' || REGISTRO.TABLE_NAME||\';\') ;
DBMS_OUTPUT.PUT_LINE (V_SQL);
-- EXECUTE IMMEDIATE (to_char(V_SQL));
DBMS_OUTPUT.PUT_LINE ( \' CANTIDAD \'|| cantidad);
END LOOP;
END;

que funciona bien con el comentario en el execute immediate , pero si se descomenta y se intenta ejecutar , da dos errores:
ORA-6550 , de compilacion
ORA- 103, error de protocolo de red . La cadena de conexión está reservada sólo para el uso de dispatchers . Pero este fallo me resulta muy extraño ya que si ejecuto las consultas que creo via cursor escribiendolas yo , va perfectamente.
¿Alguien sabe qué puede estar ocurriendo?

MUCHÍSIMAS GRACIAS

CHEMIAN
20 de Diciembre del 2005
porque haces un to_char en el execute si v_sql ya es varchar2??

Jos?ntonio
20 de Diciembre del 2005
Hola,

En la vista all_tables vienen todas las tablas de todos los usuarios. Deberías poner el propietario (owner en la vista) al construir la dml, o tirar de la vista user_tables.

Saludos

Rodolfo Reyes
20 de Diciembre del 2005
Lo que quieres hacer se puede hacer tambien de la siguiente manera:

select table_name,num_rows
from dba_tables
where table_name like 'BVP%'
/

Jose
20 de Diciembre del 2005
Chemian , Jose Antonio y Rodolfo , muchísimas gracias por vuestros consejos .

Al respecto de porqué hago la conversión a varchar , es por asegurarme , aunque como muy bien señalas , dicha conversión no es necesaria.

Muchas gracias,chicos y felices fiestas. ;-D