Несколько отношений в хранимой процедуре

Я готовлю запрос, в котором общая сумма к оплате добавляется к числу ежедневных библиотек, которые студент запрашивает в течение месяца.

Стоит отметить, что существует несколько типов библиотек, и мне нужно связать документ, подлежащий оплате, с уловом игровой библиотеки того месяца в зависимости от типа библиотеки.

Так, если студент запросил 5 библиотек в месяц, 2 - утренние и 3 - спортивные. Будет создано 2 документа, подлежащих оплате, а утренний документ, подлежащий оплате, будет назначен для 2 захватов, а спортивный документ - для 3 захватов месяца.

CREATE PROCEDURE pagodeludotecaalumnos (IN alumnoid, IN fecha) BEGIN
insert into cj_documentoporpagar(documentoid, subconceptoid, pagoestatusid, alumnoid, cicloid, gradoid,
mediopagoid, importe, saldo, fechalimitepago, fechacreacion, fechaprontopago, referencia, documento,
hermanos, reingreso, padreexalumno, concepto, iva)

select      17 as DocumentoId, 
            case when a.TipoId = 1 or a.tipoid = 2 then 122
                 when a.TipoId = 3                 then 235
                 when a.TipoId = 4                 then -1 end as SubConceptoId,
            1 as PagoEstatusId, b.AlumnoId, 
            5 as CicloId, b.GradoId, 1 as MedioPagoId,
            case when c.PrimerNombre like '%*%' or c.ApellidoPaterno like '%*%' or c.ApellidoMaterno like '%*%' then 40 * Count(*)  else  55 * Count(*) end as Importe, 
            case when c.PrimerNombre like '%*%' or c.ApellidoPaterno like '%*%' or c.ApellidoMaterno like '%*%' then 40 * Count(*)  else  55 * Count(*) end as Saldo,
            DATE(DATE_ADD(LAST_DAY(fecha), INTERVAL 1 MONTH)) as FechaLImitePago, now() as FechaCreacion, now() as FechaProntoPago,
            '' as Referencia, �L' as documento, 0 as Hermanos, 0 as Reingreso, 0 as PadreExAlumno,
            Concat('Ludoteca Marzo (',  cast(Count(*) as int), ') dia(s)') as Concepto, 0 as IVA
            /*, Concat(c.PrimerNombre, ' ', c.ApellidoPaterno, ' ', c.ApellidoMaterno) AlumnoNombre*/
from        lu_captura a
inner join  ce_alumnoporciclo b on a.alumnoporcicloid = b.alumnoporcicloid
inner join  ce_alumno c on b.alumnoid = c.alumnoid
where       date(a.Fecha) between DATE_FORMAT(fecha, '%Y-%m-01') and LAST_DAY(fecha) and a.TieneContrato = 0 and c.alumnoid = alumnoid
group by    a.TipoId, b.AlumnoId, b.GradoId

SET @LID = LAST_INSERT_ID();

update lu_captura set DocumentoPorPagarId = @LID where Fecha  between DATE_FORMAT(fecha, '%Y-%m-01') and LAST_DAY(fecha)

В настоящее время у меня есть этот запрос, и вопрос заключается в следующем: как я могу связать документ к оплате, созданный к соответствующему типу библиотеки?

Всего 1 ответ


Согласно хранимой процедуре MySQL

Я использую этот синтаксис в хранимой процедуре, если вы работаете в том же, то вы можете попробовать это

DROP Procedure IF EXISTS pagodeludotecaalumnos;

Разделитель для используется, чтобы установить всю процедуру под ним как один работоспособный

 DELIMITER $$

Команда создания процедуры

CREATE PROCEDURE pagodeludotecaalumnos (
   IN alumnoid int, IN fecha varchar(50), IN_action char(30)
) 

Дело начинается отсюда

BEGIN

  **-- switch case begin here**

   CASE 

       WHEN IN_action = "insert" THEN

Создание записи для новой записи

         INSERT INTO cj_documentoporpagar(
            documentoid, subconceptoid,pagoestatusid, alumnoid, cicloid, 
            gradoid,mediopagoid, importe,saldo, fechalimitepago, fechacreacion, 
            fechaprontopago, referencia,documento,hermanos, reingreso, 
            padreexalumno, concepto, iva
         )
        VALUES(
              IN_documentoid, IN_subconceptoid, IN_pagoestatusid,
              IN_alumnoid,IN_cicloid,IN_gradoid, IN_mediopagoid, IN_importe,
              IN_saldo,IN_fechalimitepago, IN_fechacreacion,IN_fechaprontopago, 
              IN_referencia, IN_documento, IN_hermanos, IN_reingreso, 
              IN_padreexalumno, IN_concepto, IN_iva
        );

- Вставьте конец здесь

Для обновления

       WHEN IN_action = "update"  THEN

-- For update elements
-- I am only show you how i make stored procedure in mysql i.e.  your update statement

           UPDATE lu_captura SET DocumentoPorPagarId = @LID where Fecha  between 
            DATE_FORMAT(fecha, '%Y-%m-01') and LAST_DAY(fecha)
            WHERE condition(if_exists);

Для выбора оператора

- Для элементов Select - т. Е. Ваш оператор выбора, потому что я не знаю, что вы хотите обновить, сохранить вставку

      WHEN IN_action = "select" THEN

          select      17 as DocumentoId, 
            case when a.TipoId = 1 or a.tipoid = 2 then 122
                 when a.TipoId = 3                 then 235
                 when a.TipoId = 4                 then -1 end as 
                 SubConceptoId,
                 1 as PagoEstatusId, b.AlumnoId, 
                 5 as CicloId, b.GradoId, 1 as MedioPagoId,
                 case when c.PrimerNombre like '%*%' or c.ApellidoPaterno 
                 like  '%*%' or c.ApellidoMaterno 
                 like '%*%' then 40 * Count(*)  
               else  55 * Count(*) end as Importe, 

            case 
               when c.PrimerNombre like '%*%' or c.ApellidoPaterno 
                 like '%*%' or c.ApellidoMaterno 
                 like '%*%' then 40 * Count(*)  else  55 * Count(*)
                 end as Saldo,
                 DATE(DATE_ADD(LAST_DAY(fecha), INTERVAL 1 MONTH)) as 
                 FechaLImitePago, now() as FechaCreacion, now() as 
                 FechaProntoPago, '' as Referencia, �L' as documento, 0 
                 as Hermanos, 0 as Reingreso, 0 as PadreExAlumno,
               Concat('Ludoteca Marzo (',  cast(Count(*) as int), ') dia(s)') 
                as Concepto, 0 as IVA
               /*, Concat(c.PrimerNombre, ' ', c.ApellidoPaterno, ' ', 
                c.ApellidoMaterno) AlumnoNombre*/

             from        lu_captura a
             inner join  ce_alumnoporciclo b on a.alumnoporcicloid = 
                         b.alumnoporcicloid
             inner join  ce_alumno c on b.alumnoid = c.alumnoid

            where      
               date(a.Fecha) between DATE_FORMAT(fecha, '%Y-%m-01') and 
               LAST_DAY(fecha) and a.TieneContrato = 0 and c.alumnoid = 
               alumnoid group by    a.TipoId, b.AlumnoId, b.GradoId

    END CASE;
 -- switch case ends here

END;

- конец ПРОЦЕДУРЫ


Есть идеи?

10000