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

cursores y triggers plsql

Estas en el tema de cursores y triggers plsql en el foro de Oracle en Foros del Web. En una bdd de restaurante tengo tres tablas: platos, clientes y pide. Se pide: Con cursores: 1.- visualizar el menu mas barato compiuesto de plato ...
  #1 (permalink)  
Antiguo 15/08/2013, 08:37
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 1 mes
Puntos: 0
cursores y triggers plsql

En una bdd de restaurante tengo tres tablas: platos, clientes y pide.
Se pide:
Con cursores:
1.- visualizar el menu mas barato compiuesto de plato primero, segundo y postre, y precio final del menu
2.- visualizar la factura de un cliente, comida o cena, fecha de la factura y nombre de los platos tomados. con funcion y procedimiento
3.- definir un tipo tclientes tabla o array. Realiza una fincion que devuelva un tclientes con los clientes que han consumido hoy

Con triggers:
1.- cada vez que se borre un cliente, comprobar que no existe ningun registro en pide. si es asi, borrar primero los rehistros en pide y liego el cliente, pasando los datos a una tabla historica
2.- cuando se realice ina insercion en pide,comprobar que el cliente esta aun en el hotel
  #2 (permalink)  
Antiguo 15/08/2013, 08:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: cursores y triggers plsql

__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/08/2013, 08:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cursores y triggers plsql

¿Y qué es lo que intentaste hacer?
¿Escribiste algún código, hiciste alguna prueba?
¿Qué es lo que no entiendes de esa consigna (ya que eso parece un trabajo práctico, y no un problema de un desarrollo)?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/08/2013, 08:54
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: cursores y triggers plsql

hice esto pero creo que el fallo lo tengo en la cadena sql porque no se comohacer para poder seleccionar aparte de primero, el segundo y postre
Código SQL:
Ver original
  1. /*----declaracion---*/
  2. DECLARE
  3.     CURSOR cursor1 IS
  4.          SELECT nombre FROM platos WHERE precio=(SELECT MIN(precio) FROM platos WHERE tipo='postre');
  5.     V_postre varchar2(20);
  6. BEGIN
  7. /*----apertura---*/
  8. OPEN cursor1;
  9. /*----recogida de datos---*/
  10. LOOP
  11.    FETCH cursor1 INTO V_postre;
  12.    exit WHEN cursor1%notfound;
  13.    dbms_output.put_line(v_postre);
  14. END LOOP;
  15. /*----cierre del cursor--*/
  16. CLOSE cursor1;
  17. END;
  18. /

Última edición por gnzsoloyo; 15/08/2013 a las 08:59
  #5 (permalink)  
Antiguo 15/08/2013, 09:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cursores y triggers plsql

Yo lo pondría de otra forma, para empezar a probar:
Código SQL:
Ver original
  1. /*----declaracion---*/
  2.  
  3. DECLARE
  4.     CURSOR cursor1
  5.     IS
  6.         SELECT nombre
  7.           FROM platos
  8.          WHERE tipo = 'postre'
  9.         HAVING precio = MIN (precio);
  10.  
  11.     V_postre   VARCHAR2 (20);
  12. BEGIN
  13. /*----apertura---*/
  14.     OPEN cursor1;
  15.  
  16. /*----recogida de datos---*/
  17.     LOOP
  18.         FETCH cursor1 INTO V_postre;
  19.         EXIT WHEN cursor1%NOTFOUND;
  20.         DBMS_OUTPUT.put_line (v_postre);
  21.     END LOOP;
  22.  
  23. /*----cierre del cursor--*/
  24.     CLOSE cursor1;
  25. END;
  26. /
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 15/08/2013, 09:38
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: cursores y triggers plsql

Pero con eso se sigue recogiendo solamente un tipo de plato y tengo que recoger el precio minimo dentro de tres categorias diferentes, es decir el minimo de tipo primero, el precio minimo de tipo segundo e idem para postre
  #7 (permalink)  
Antiguo 15/08/2013, 09:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cursores y triggers plsql

En ese contexto no puedes obtener el nombre, porque debes agrupar por tipo, y si agrupas por tipo y nombre, te puede devolver más de uno de cada categoría, si hay más de un tipo de plato con el mismo precio.
Para que te devuelva un único plato por cada tipo, se requiere una estructura más compleja de lo que planteas.
En todo caso, para obtener de cada tipo, el precio mínimo sería:
Código SQL:
Ver original
  1. /*----declaracion---*/
  2.  
  3. DECLARE
  4.     CURSOR cursor1
  5.     IS
  6.         SELECT   tipo, MIN (precio) precio
  7.             FROM platos
  8.         GROUP BY tipo;
  9.  
  10.     V_tipo     VARCHAR2 (20);
  11.     V_precio   NUMBER;
  12. BEGIN
  13. /*----apertura---*/
  14.     OPEN cursor1;
  15.  
  16. /*----recogida de datos---*/
  17.     LOOP
  18.         FETCH cursor1
  19.          INTO V_tipo, v_precio;
  20.  
  21.         EXIT WHEN cursor1%NOTFOUND;
  22.         DBMS_OUTPUT.put_line (   'Tipo: '
  23.                               || v_tipo
  24.                               || ' Precio: '
  25.                               || TO_CHAR (v_precio)
  26.                              );
  27.     END LOOP;
  28.  
  29. /*----cierre del cursor--*/
  30.     CLOSE cursor1;
  31. END;
  32. /
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/08/2013, 01:47
 
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: cursores y triggers plsql

Para el primer trigger se me ocurre algo como esto:

Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER auditar_clientes
  2. BEFORE INSERT OR DELETE
  3. ON CLIENTES
  4. FOR EACH ROW
  5. BEGIN
  6. IF DELETING THEN
  7. INSERT INTO AUDITARCLIENTES
  8. VALUES(TO_CHAR(sysdate,'DD/MM/YY*HH24:MI*') || :OLD.NOMBRE|| '*' ||'* BORRADO ');
  9. ELSIF INSERTING THEN
  10. INSERT INTO AUDITARCLIENTES
  11. VALUES(TO_CHAR(sysdate,'DD/MM/YY*HH24:MI*') || :NEW.NOMBRE || '*' ||'* INSERCION ');
  12. END IF;
  13. END;
que os parece?

Última edición por gnzsoloyo; 17/08/2013 a las 05:00

Etiquetas: cursores, nombre, plsql, registro, 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 08:05.