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

intento eliminar unas filas pero no me resulta, en que me estoy equivocando???

Estas en el tema de intento eliminar unas filas pero no me resulta, en que me estoy equivocando??? en el foro de Oracle en Foros del Web. hola a todos, tengo el sgte codigo el cual intento borrar todas las filas que devuelva la consulta, en donde, coincida con el nombre de ...
  #1 (permalink)  
Antiguo 02/02/2012, 12:39
 
Fecha de Ingreso: agosto-2011
Mensajes: 20
Antigüedad: 12 años, 7 meses
Puntos: 0
intento eliminar unas filas pero no me resulta, en que me estoy equivocando???

hola a todos, tengo el sgte codigo el cual intento borrar todas las filas que devuelva la consulta, en donde, coincida con el nombre de un usuario.

el codigo es el sgte:

Código SQL:
Ver original
  1. CREATE OR REPLACE
  2. PROCEDURE BORRAR_ROLES_USUARIO AS
  3.  
  4.  
  5. -------USUARIO A ELIMINAR------------
  6. v_usuario varchar2(30) := 'FELIPE';
  7. ---------------------------------------------
  8. v_user varchar2(100) ;
  9. v_rol varchar2(30);
  10. consulta varchar2(100);
  11. consulta2 varchar2(50);
  12.  
  13. CURSOR borra_usuario IS SELECT USUARIO, ROL FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = v_usuario;  
  14.  
  15. BEGIN
  16. OPEN borra_usuario;
  17. LOOP
  18.   FETCH borra_usuario INTO v_user, v_rol;    
  19. consulta:= 'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '|| v_user;
  20.  
  21. EXECUTE IMMEDIATE consulta;
  22.  
  23. END LOOP;
  24. CLOSE borra_usuario;
  25. COMMIT;
  26. END BORRAR_ROLES_USUARIO;

el problema que se me presenta es que me arroja el sgte error:

ORA-00904: "FELIPE": identificador no válido

la verdad que ese tal FELIPE si existe dentro de la tabla, y deveria borrar 2 filas...lamentablente no hace nada y solo arroja el error..

en que me puedo estar equivocando???
estaré atento a sus respuestas!!
saludoss!
  #2 (permalink)  
Antiguo 02/02/2012, 13:52
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Respuesta: intento eliminar unas filas pero no me resulta, en que me estoy equivocand

v_user es una variable y tiene que ir entrecomillado, algo asi

consulta:= 'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '|| '''v_user''';

o así

consulta:= 'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '|| ''''v_user'''';

Una de las dos te tiene que rular
  #3 (permalink)  
Antiguo 02/02/2012, 16:34
 
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 9
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: intento eliminar unas filas pero no me resulta, en que me estoy equivocand

Otra observacion leo_star es que jamas cierras tu cursor te faltaria...

ademas me imagino que ocupas el cursor para otra cosa por que no entiendo para que haces un cursor a la tabla SYSTEM.CONTROL_PERMISOS y en el delete haces exactamente lo mismo


y con respecto al error que te manda creo k te funcionaria asi

'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '''|| v_user||'''';



CURSOR borra_usuario IS SELECT USUARIO, ROL FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = v_usuario;

BEGIN
OPEN borra_usuario;
LOOP
FETCH borra_usuario INTO v_user, v_rol;
EXIT WHEN borra_usuario%NOTFOUND;
consulta:= 'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '|| v_user;

EXECUTE IMMEDIATE consulta;

END LOOP;
CLOSE borra_usuario;
COMMIT;
END BORRAR_ROLES_USUARIO;
  #4 (permalink)  
Antiguo 03/02/2012, 01:34
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Respuesta: intento eliminar unas filas pero no me resulta, en que me estoy equivocand

Cita:
Iniciado por Sh3r3z4d4 Ver Mensaje
Otra observacion leo_star es que jamas cierras tu cursor te faltaria...

ademas me imagino que ocupas el cursor para otra cosa por que no entiendo para que haces un cursor a la tabla SYSTEM.CONTROL_PERMISOS y en el delete haces exactamente lo mismo


y con respecto al error que te manda creo k te funcionaria asi

'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '''|| v_user||'''';



CURSOR borra_usuario IS SELECT USUARIO, ROL FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = v_usuario;

BEGIN
OPEN borra_usuario;
LOOP
FETCH borra_usuario INTO v_user, v_rol;
EXIT WHEN borra_usuario%NOTFOUND;
consulta:= 'DELETE FROM SYSTEM.CONTROL_PERMISOS WHERE USUARIO = '|| v_user;

EXECUTE IMMEDIATE consulta;

END LOOP;
CLOSE borra_usuario;
COMMIT;
END BORRAR_ROLES_USUARIO;
Correcto, las comillas las has puesto correctamente, acabo de comprobarlo.

Otra cosa, creo que esto : EXECUTE IMMEDIATE consulta;

Debe de ir así : EXECUTE IMMEDIATE(consulta);

Y respecto a los cursores, recomiendo usar una variable en lugar del open,

FOR VARIABLE IN CURSOR LOOP

..
..

END LOOP;

Todo eso lleva un OPEN-CLOSE-EXIT implicito y te evitas el teclearlo.

Salu2
  #5 (permalink)  
Antiguo 03/02/2012, 12:01
 
Fecha de Ingreso: agosto-2011
Mensajes: 20
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: intento eliminar unas filas pero no me resulta, en que me estoy equivocand

MUCHAS GRACIAS POR SUS RESPUESTAS AMIGOS!
con esto he aprendido mucho ,
hice todas las modificaciones que me dijeron y funcionaron a la perfección!!

Muchas gracias nuevamente por su tiempo y sus ayudas,
Saludos!!!

Etiquetas: filas, intento, select, tabla
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 20:53.