Problema sencillo que me trae loco
Hola a tod@s,
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
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
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
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
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%'
/
select table_name,num_rows
from dba_tables
where table_name like 'BVP%'
/
