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

Borrar funciones

Estas en el tema de Borrar funciones en el foro de Oracle en Foros del Web. Muy buenas tardes a todos!! Estoy tratando de hacer un ejercicio... y me encuentro con cada complicación... Les cuento por si me pueden echar un ...
  #1 (permalink)  
Antiguo 06/01/2010, 10:14
 
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 0
Borrar funciones

Muy buenas tardes a todos!!
Estoy tratando de hacer un ejercicio... y me encuentro con cada complicación... Les cuento por si me pueden echar un cable.
Debo crear un procedimiento para eliminar todas las funciones y procedimientos (salvo el actual). De momento, y dado todos los problemas que me encontré estoy borrando las funciones:

CREATE OR REPLACE PROCEDURE BORRA_OBJETOS10 IS
CURSOR C1 IS SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='FUNCTION' FOR UPDATE;
BEGIN
FOR REG IN C1 LOOP
EXECUTE IMMEDIATE 'DROP '|| C1.OBJECT_TYPE || ' "' || C1.OBJECT_NAME ||'" WHERE CURRENT OF C1';
END LOOP;
END;
/

Pero me da error: ERROR en línea 5: PLS-00225: la referencia al subprograma o cursor 'C1' está fuera del ámbito
¿Saben por qué? ¿Podrían aclararme un poquito?
Muchas gracias por su atención.
Un saludo!

Última edición por Sherezade81; 06/01/2010 a las 10:19
  #2 (permalink)  
Antiguo 06/01/2010, 10:22
 
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Borrar funciones

Creo haberlo resuelto, mi parra, parrita:

CREATE OR REPLACE PROCEDURE BORRA_OBJETOS10 IS
CURSOR C1 IS SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='FUNCTION' FOR UPDATE;
BEGIN
FOR REG IN C1 LOOP
EXECUTE IMMEDIATE 'DROP '|| REG.OBJECT_TYPE || ' "' || REG.OBJECT_NAME ||'" WHERE CURRENT OF C1';
END LOOP;
END;
/
Muchas gracias a todos!
  #3 (permalink)  
Antiguo 06/01/2010, 10:29
 
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Borrar funciones

Bueno, demasiado facil, intento llamar al procedimiento:
begin
borra_objetos10;
end;

Y me da el error para variar...: ORA-02014: no se puede seleccionar FOR UPDATE de la vista con DISTINCT, GROUP BY, etc.

¿Por qué? Vaya locura....
Un saludo
  #4 (permalink)  
Antiguo 06/01/2010, 11:06
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Borrar funciones

Quita el FOR UPDATE del cursor, nada mas.
  #5 (permalink)  
Antiguo 06/01/2010, 12:07
 
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Borrar funciones

Muchísimas gracias jc3000, funciona a la perfección.
La verdad es que no lo entiendo porque siguiendo los apuntes (estoy haciendo un módulo a distancia) entiendo que para utilizar los cursores de esta forma había que indicar for update en la declaración del cursor... qué locura!!
Un millón de gracias, y saludos!!!

Etiquetas: borrar, funciones
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 08:14.