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

Problema con generar procedimiento en MariaDB

Estas en el tema de Problema con generar procedimiento en MariaDB en el foro de Mysql en Foros del Web. Hola compañeros, buen dia, tengo un problema cuando quiero guardar el siguiente procedimiento almacenado, anteriormente utilizaba informix pero ahora me he perdido con algo de ...
  #1 (permalink)  
Antiguo 11/01/2017, 21:18
 
Fecha de Ingreso: octubre-2013
Ubicación: Loreto, Zacatecas
Mensajes: 24
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Problema con generar procedimiento en MariaDB

Hola compañeros, buen dia, tengo un problema cuando quiero guardar el siguiente procedimiento almacenado, anteriormente utilizaba informix pero ahora me he perdido con algo de la sintaxis, necesito de su ayuda por favor.

Código MySQL:
Ver original
  1. DELIMITER //
  2. #Procedimiento para verificar alumnos aprobados
  3. CREATE PROCEDURE apr_alu(
  4.     IN nom_prueba VARCHAR(150),
  5.     IN categoria VARCHAR(30),
  6.     IN materia VARCHAR(30),
  7.     IN carrera VARCHAR(30),
  8.     IN universidad VARCHAR(50)
  9. )
  10.  
  11. #Variables para el control del cursor y auxiliares
  12.   DECLARE fin_row INT DEFAULT 0 ;
  13.   DECLARE con_row INT DEFAULT 0 ;
  14.   DECLARE l_con_tador INT DEFAULT 0 ;
  15.  
  16. #Variables del cursor recorrido
  17.   DECLARE identi INT(10) ;
  18.   DECLARE nombre VARCHAR(150) ;
  19.   DECLARE catego VARCHAR(30) ;
  20.   DECLARE fecpru DATETIME ;
  21.   DECLARE nestud VARCHAR(150) ;
  22.   DECLARE cestud DECIMAL(2,1) ;
  23.   DECLARE edstud VARCHAR(3) ;
  24.   DECLARE materi VARCHAR(30) ;
  25.   DECLARE carrer VARCHAR(30) ;
  26.   DECLARE univer VARCHAR(50) ;
  27.  
  28. #Llenado de tabla temporal
  29. #Aqui se definen los datos de quienes quiero obtener los datos y se insertan
  30. #en una tabla temporal para que la base siga con sus datos.
  31.  
  32. #Primero genero mi tabla temporal
  33.     identi INT,
  34.     nombre VARCHAR(150),
  35.     catego VARCHAR(30),
  36.     fecpru DATETIME,
  37.     nestud VARCHAR(150),
  38.     cestud DECIMAL(2,1),
  39.     edstud VARCHAR(3),
  40.     materi VARCHAR(30),
  41.     carrer VARCHAR(30),
  42.     univer VARCHAR(50),
  43.     mensaj VARCHAR(30)#Se agrego para mostrar si fue aprobatoria su calificación
  44.   ) ;
  45.  
  46.  
  47. #Realizo la validacion de que insertare por lo menos un registro en mi tabla temporal
  48.   SELECT COUNT (*) INTO l_con_tador
  49.   FROM db01pruebas a
  50.   WHERE a.db01_nom_prueba = nom_prueba AND a.db01_cat_prueba = categoria AND a.db01_mat_eria = materia AND a.db01_car_rera = carrera AND a.db01_uni_vers = universidad ; IF l_con_tador > 0 THEN
  51.  #Reviso que por lo menos tenga un registro para insertar
  52.  
  53.   INSERT INTO alu_temp
  54.   SELECT *,'XXXXX'
  55.   FROM db01pruebas a
  56.   WHERE a.db01_nom_prueba = nom_prueba AND a.db01_cat_prueba = categoria AND a.db01_mat_eria = materia AND a.db01_car_rera = carrera AND a.db01_uni_vers = universidad ;
  57.  
  58. #select* from alu_temp
  59.  
  60. #Declaro mi cursor para comenzar el recorrido
  61.  DECLARE recorrido CURSOR FOR
  62.   SELECT  identi, nombre, catego, fecpru,
  63.          nestud, cestud, edstud, materi,
  64.          carrer, universidad
  65.   FROM alu_temp ;
  66.  
  67. #Revisar los registros por recorrer y tomar el error cuando se terminen
  68.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_row = 1 ;
  69.         SET con_row = 0 ;
  70.   OPEN recorrido ;
  71.  
  72. r1_loop : LOOP
  73.  
  74.  FETCH CURSOR INTO ridenti, rnombre, rcatego, rfecpru,
  75.                    rnestud, rcestud, redstud,
  76.                    rmateri, rcarrer, runiver ;
  77.  
  78.     IF(fin_row = 1) THEN
  79.         LEAVE r1_loop ;
  80.     END IF ;
  81.  
  82. #En este apartado se realiza el tratamiento para cada registro por recorrer
  83. IF rcestud >= 8 THEN
  84.   UPDATE alu_temp
  85.      SET mensaj = "Aprobado"
  86.     WHERE identi = ridenti ;
  87.   UPDATE alu_temp
  88.      SET mensaj = "No aprobado"
  89.    WHERE identi = ridenti ;
  90.  
  91.   SET con_row = con_row + 1 ;
  92. END LOOP r1_loop ;
  93. CLOSE recorrido ;
  94.   SELECT * FROM alu_temp ;
  95.   #drop table alu_temp;
  96.  
  97.  #Si no hay mas de un registro por insertar termina
  98.       SELECT 'No hay registros con los parametros de entrada, intente con otros...' AS mensaje ;
  99. END ; //
[/CODE]

Última edición por gnzsoloyo; 12/01/2017 a las 14:10

Etiquetas: procedimiento, registro, 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 03:17.