MySQL сказал: # 1064 - у вас ошибка в синтаксисе SQL; MySQL версия сервера для правильного синтаксиса для использования рядом с '' в строке 97 - PullRequest
0 голосов
/ 23 марта 2020

Это хранимая процедура, на которой уже запущен sql server 2005 со своим собственным синтаксисом, и здесь я написал это в синтаксисе mysql. Все в порядке, но в операторе последнего конца отображается ошибка.

DELIMITER $$

CREATE DEFINER = root @ localhost PROCEDURE sp_PREPAREACCOUNTREPORTSBEGIN (IN fdate1 DATE, IN tdate1 ДАТА, В GrossProfit ДВОЙНОЙ, В NetProfit ДВОЙНОЙ, В OpeningStock ДВОЙНОЙ, В ClosingStock ДВОЙНОЙ, В DiffInBalance ДВОЙНОЙ, В dc VARCHAR (25)
НАЧАЛО

Create temporary table if not exists Trading
        (Ac_code bigint, AcName varchar(255),Amount float,DC varchar(20),seq int) ENGINE=MEMORY;
insert into Trading SELECT  ledger_master.Ac_code, ledger_master.Ac_name,
                (select case  tmp_closingbalance.Dr when 0 then tmp_closingbalance.Cr else tmp_closingbalance.Dr end),  (select case  tmp_closingbalance.Dr when 0 then 'cr' else 'dr' end),sequence
FROM ledger_master INNER JOIN tmp_closingbalance ON ledger_master.Ac_code = tmp_closingbalance.ac_code INNER JOIN accountgroup ON ledger_master.Group_code = accountgroup.Group_code
where accountgroup.position='t' order by sequence;
set @GrossProfit := 0;
set @GrossProfit := (select ifnull(sum(Amount),0) from Trading where DC='dr') - (select ifnull(sum(Amount),0) from Trading where DC='cr');
        if(@GrossProfit >0) 
        THEN    
        insert into Trading values(0,'GROSS PROFIT',  (@GrossProfit),'cr',9999 );
        else if(@GrossProfit <0)
        then
        insert into Trading values(0,'GROSS PROFIT',  -(@GrossProfit),'dr',9999 );
         end if;
Create temporary table if not exists PL
        (Ac_code bigint,AcName varchar(255),Amount float,DC varchar(20),seq int) ENGINE=MEMORY;
insert into PL 
SELECT    ledger_master.Ac_code, ledger_master.Ac_name,
                (select case  tmp_closingbalance.Dr when 0 then tmp_closingbalance.Cr else tmp_closingbalance.Dr end),
                (select case  tmp_closingbalance.Dr when 0 then 'cr' else 'dr' end),sequence
FROM         ledger_master INNER JOIN
                      tmp_closingbalance ON ledger_master.Ac_code = tmp_closingbalance.ac_code INNER JOIN
                      accountgroup ON ledger_master.Group_code = accountgroup.Group_code
where accountgroup.position='p' order by sequence;
        if (@GrossProfit >0)
        then
        insert into PL values(0,'BY GROSS PROFIT',  (@GrossProfit),'dr',9999 );
        else if (@GrossProfit <0)
        then
        insert into PL values(0,' BY GROSS PROFIT',  -(@GrossProfit),'cr',9999 );
        end if;
set @NetProfit := 0;
set @NetProfit := (select ifnull(sum(Amount),0) from PL where DC='dr') - (select ifnull(sum(Amount),0) from PL where DC='cr');
        if(@NetProfit >0)
        then    
insert into PL values(0,'TO NET PROFIT',  (@NetProfit),'cr',9999 );
else if(@NetProfit <0)
then
insert into PL values(0,'TO NET PROFIT',  -(@NetProfit),'dr',9999 );
end if;

Create temporary table if not exists Balancesheet
        (Ac_code bigint,AcName varchar(255),Amount float,DC varchar(20),seq int) ENGINE=MEMORY;
insert into Balancesheet 
SELECT     ledger_master.Ac_code,ledger_master.Ac_name,
                (select case  tmp_closingbalance.Dr when 0 then tmp_closingbalance.Cr else tmp_closingbalance.Dr end),  (select case  tmp_closingbalance.Dr when 0 then 'cr' else 'dr' end),sequence
FROM  ledger_master INNER JOIN tmp_closingbalance ON ledger_master.Ac_code = tmp_closingbalance.ac_code INNER JOIN accountgroup ON ledger_master.Group_code = accountgroup.Group_code
where accountgroup.position='b' order by sequence;

insert into Balancesheet values(0,'PROFIT & LOSS A/C',-(@NetProfit),'cr',9999);
set @DiffInBalance := 0;
select @DiffInBalance := ((select ifnull(sum(Amount),0) from Balancesheet where DC='dr') - ( select ifnull(sum(Amount),0) from Balancesheet where DC='cr'));

delete from tmp_prepareaccountreports; 
insert into tmp_prepareaccountreports select Ac_code,AcName,Amount,DC,seq,1 as types from Trading order by  types,seq;
insert into tmp_prepareaccountreports select Ac_code,AcName,Amount,DC,seq,2 as types from PL order by  types,seq;
insert into tmp_prepareaccountreports select Ac_code,AcName,Amount,DC,seq,3 as types from Balancesheet order by types,seq;

Конец $$ DELIMITER;

1 Ответ

1 голос
/ 23 марта 2020

ELSEIF НЕ ДАЛЕЕ, пожалуйста, просмотрите https://dev.mysql.com/doc/refman/8.0/en/if.html

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