Несколько отношений в хранимой процедуре - PullRequest
0 голосов
/ 27 марта 2020

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

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

Итак, если студент запросил 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, '202003L' 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 Ответ

0 голосов
/ 27 марта 2020

Согласно 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);

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

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

      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, '202003L' 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;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...