Delimiter //
/**
 * Author:  armen
 * Created: 7 juil. 2020
 * recherche des comptes par siren. 
 * Les résultats sont stokés dans une table temporaire 
 * par defaut : TMP_LOADER_ACCOUNTS_FOUND_BY_SIREN
 * la regle est la suivante :
 *  il y a 3 passes pour trouver les comptes
 *  1) recherche par référence de compte : 
 *      si la reférence de compte est fourni (fieldAccountRef renseigné) on recherche les comptes 
 *      en priorité sur la référence
 *  2) recherche par SIREN :
 *      si la longeur du siren fourni fait 14 caracteres (SIRET) ou 9 caracteres (SIREN),
 *      on recherche les comptes dont l'un des contacts à un SIREN identique.
 *      la longeur du SIREN du contact doit également faire 14 ou 9 caracteres
 *      On compare les 9 caracteres de gauche des données source aux 9 caracteres des contacts (business)
 *      - On exclu les comptes déjà présants dans la table de sortie (table présérvé ou comptes
 *          trouvés par référence)
 *      - On exclu de cette recherche les contacts dont la longeur du SIREN/SIRET 
 *          ne fait ni 9 ni 14 caractères
 * 3) recherche "exacte" :
 *      si la longeur de l'identifant fourni(SIRET ?) ne fait ni 14 (SIRET) caracteres ni 9 caracteres (SIREN)
 *      on recherche les comptes dont l'un des contacts à un identifiant (SIRET ?) identique.
 *      la longeur de l'identifiant (SIRET ?) du contact ne doit ni faire 14 ni 9 caracteres
 *      On compare la valeur de la donnée source à la valeur du champ SIRET du contacts (business)
 *      - On exclu les comptes déjà présants dans la table de sortie (table présérvé ou comptes
 *          trouvés précédament)
 *      - On exclu les contacts dont la longeur du SIREN/SIRET fait 9 ou 14 caractères
 * Rearque:
 *  les comptes sont recherche dans l'entité obentenu par interogation de la table LOADER_INFO
 * Parametres
 * 
 * @param batchnum Int  (IN) : numero de lot d''import
 * @param tableSrc Varchar(50) (IN - obligatoire) :  nom de la table contentant les donnés 
 * @param fieldIdTableSrc Varchar(50) (IN - obligatoire) : nom de la clé primaire dans la table des données
 * @param fieldSiren Varchar(50) (IN - obligatoire) : champ contentant le siren/siren dans la table des données
 * @param fieldIdLoaderStatus Varchar(50) (IN - facultatif) : champ avec l'id de status dans la tables des donnés. Par defaut LOADER_STATUS_ID_LOADER_STATUS
 * @param fieldAccountRef Varchar(50) (IN - facultatif) : champ optionel avec le référence de compte 
 * @param fieldMainCtcOnly Varchar(50) (IN - facultatif) : champ optionel avec une valeur 1/0, pour indiquer s'il faut limiter la recherche aux contacts principaux des comptes
 * @param tableAccountFound Varchar(50) (IN - facultatif) : table de sortie. Par défaut TMP_LOADER_ACCOUNTS_FOUND_BY_SIREN
 * @param clearOutputTable smallint (IN - facultatif) : indique s'il faut purger la table de sortie
 */
Drop Procedure If Exists LOADER_FIND_ACCOUNTS_BY_SIREN//
Create Procedure LOADER_FIND_ACCOUNTS_BY_SIREN(
    In batchnum Int
    , In tableSrc Varchar(50)
    , In fieldIdTableSrc Varchar(50)
    , In fieldSiren Varchar(50)
    , In fieldIdLoaderStatus Varchar(50)
    , In fieldAccountRef Varchar(50)
    , In fieldMainCtcOnly Varchar(50)
    , In tableAccountFound Varchar(50)
    , In clearOutputTable SmallInt

)
Begin
    lfabs_main: Begin
        lfabs_init: Begin
            Set @lfabs_batchnum = batchnum;
            Set @lfabs_tableSrc = tableSrc;
            Set @lfabs_fieldIdTableSrc = Coalesce(NullIf(Trim(Coalesce(fieldIdTableSrc, '')), ''), concat('ID_',  @lfabs_tableSrc));   
            Set @lfabs_fieldSiren = fieldSiren; 
            Set @lfabs_fieldIdLoaderStatus = Coalesce(NullIf(Trim(Coalesce(fieldIdLoaderStatus, '')), ''), 'LOADER_STATUS_ID_LOADER_STATUS');  
            Set @lfabs_fieldAccountRef = NullIf(Trim(Coalesce(fieldAccountRef, '')), '');
            Set @lfabs_fieldMainCtcOnly = NullIf(NullIf(Trim(Coalesce(fieldMainCtcOnly, '')), ''), '0');

            Set @lfabs_tableAccountFound = Coalesce(NullIf(Trim(Coalesce(tableAccountFound, '')), ''), 'TMP_LOADER_ACCOUNTS_FOUND_BY_SIREN'); 
            Set @lfabs_clearOutputTable = Coalesce(clearOutputTable, 1); 

--             Set @lfabs_idEntities = GET_LOADER_INFO('ID_ENTITIES', @lfabs_batchnum);
            Set @lfabs_idEntities = GET_LOADER_INFO('ID_ENTITIES', greatest(@lfabs_batchnum, 1));

            if @lfabs_idEntities Is null then
                leave lfabs_main;
            end If;

            if @lfabs_clearOutputTable > 0 Then
                Set @lfabs_outputTableClearQuery = Concat(
                            'Drop Temporary Table If Exists `', @lfabs_tableAccountFound, '` '
                        )
                    ;

                Prepare lfabs_stmtClearOutputTable From @lfabs_outputTableClearQuery;
                execute lfabs_stmtClearOutputTable;	
                Deallocate prepare lfabs_stmtClearOutputTable;

            End if;

            lfabs_outputTablePrepare: Begin
                -- table ave cles résultats trouvées
                Set @lfabs_outputTableCreateQuery = Concat(
                            'Create Temporary Table if Not Exists `', @lfabs_tableAccountFound, '` ( '
                            , ' ACCOUNTS_ID_ACCOUNTS Int Unsigned Not Null '
                            , ' , LOADER_STATUS_ID_LOADER_STATUS Int Unsigned Null '
                            , ' , LOADER_BASE_TABLE_ID Int Unsigned Null '
                            , ' , Index(ACCOUNTS_ID_ACCOUNTS) '
                            , ' , Index(LOADER_STATUS_ID_LOADER_STATUS) '
                            , ' , Index(LOADER_BASE_TABLE_ID) '
                            , ') '
                        )
                    ;

                Prepare lfabs_stmtCreateOutputTable From @lfabs_outputTableCreateQuery;
                execute lfabs_stmtCreateOutputTable;	
                Deallocate prepare lfabs_stmtCreateOutputTable;
            End;

            Set @lfabs_TableWithIndexedSiren = Concat('TMP_LOADER_CONTACT_SIREN_', @lfabs_idEntities);

            if @lfabs_batchnum = 0 Then
                -- creation d'une table dénormalisé avec les siren préparé et indéxé

--                 Set @lfabs_idEntities = GET_LOADER_INFO('ID_ENTITIES', 1);
--                 Set @lfabs_TableWithIndexedSiren = Concat('TMP_LOADER_CONTACT_SIREN_', @lfabs_idEntities);


--                 -- pour purge retro compatibilité supression de l'ancienne table non temporaire
--                 Set @lfabs_clrOldPermTblWthIndexedSirenQuery = Concat(
--                             'Drop Table If Exists `', @lfabs_TableWithIndexedSiren, '` '
--                         )
--                     ;
--                 Prepare lfabs_stmtClrOldPermTblWthIndexedSiren From @lfabs_clrOldPermTblWthIndexedSirenQuery;
--                 execute lfabs_stmtClrOldPermTblWthIndexedSiren;	
--                 Deallocate prepare lfabs_stmtClrOldPermTblWthIndexedSiren;


                Set @lfabs_clrTblWthIndexedSirenQuery = Concat(
                            -- pas de temporary car plusieur "jointure" , limitation mysql
--                             'Drop Temporary Table If Exists `', @lfabs_TableWithIndexedSiren, '` '
                            'Drop Table If Exists `', @lfabs_TableWithIndexedSiren, '` '
                        )
                    ;
                Prepare lfabs_stmtClrTblWthIndexedSiren From @lfabs_clrTblWthIndexedSirenQuery;
                execute lfabs_stmtClrTblWthIndexedSiren;	
                Deallocate prepare lfabs_stmtClrTblWthIndexedSiren;

                Set @lfabs_createTblWthIndexedSirenQuery = Concat(
--                             'Create Table Temporary `', @lfabs_TableWithIndexedSiren, '` ('
                            'Create Table `', @lfabs_TableWithIndexedSiren, '` ('
                            , ' ACCOUNTS_ID_ACCOUNTS Int Unsigned Not Null '
                            , ' , IS_MAIN_CONTACTS SMALLINT Not Null Default 0 '
                            , ' , CONTACTS_BUSINESS_SIRET Varchar(15) Not Null '
                            , ' , Index(ACCOUNTS_ID_ACCOUNTS)'
                            , ' , Index(CONTACTS_BUSINESS_SIRET)'
                            , ')'
                        )
                    ;
                Prepare lfabs_stmtCreateTblWthIndexedSiren From @lfabs_createTblWthIndexedSirenQuery;
                execute lfabs_stmtCreateTblWthIndexedSiren;	
                Deallocate prepare lfabs_stmtCreateTblWthIndexedSiren;

                Set @lfabs_insertTblWthIndexedSirenQuery = Concat(
                            'Insert Into `', @lfabs_TableWithIndexedSiren, '` ('
                            , ' ACCOUNTS_ID_ACCOUNTS  '
--                             , ' , CONTACTS_ID_CONTACTS '
                            , ' , IS_MAIN_CONTACTS '
                            , ' , CONTACTS_BUSINESS_SIRET '
                            , ') '
                            , 'Select ACC.ID_ACCOUNTS '
--                             , '  , CTC.ID_CONTACTS '
                            , '  , Case When CTC.ID_CONTACTS = ACC.CONTACTS_ID_CONTACTS Then 1 Else 0 End '
--                             , ' , Case When Length(CTBS.CONTACTS_BUSINESS_SIRET) In (9, 14) Then Substring(CTBS.CONTACTS_BUSINESS_SIRET, 1, 9) Else CTBS.CONTACTS_BUSINESS_SIRET End '
                            , ' , Case When Length(@lfabs_siret := Trim(CTBS.CONTACTS_BUSINESS_SIRET)) In (9, 14) Then Substring(@lfabs_siret, 1, 9) Else CTBS.CONTACTS_BUSINESS_SIRET End '
                            , 'From ACCOUNTS ACC '
                            , ' Inner Join CONTACTS CTC '
                            , '     On ACC.ID_ACCOUNTS = CTC.ACCOUNTS_ID_ACCOUNTS '
                            , ' Inner Join CONTACTS_BUSINESS CTBS '
                            , '     On CTC.ID_CONTACTS = CTBS.CONTACTS_ID_CONTACTS '
                            , 'Where ACC.ENTITIES_ID_ENTITIES = ? '
                            , ' And Trim(Coalesce(CTBS.CONTACTS_BUSINESS_SIRET, ''''))<>'''' '
                            , ''
                        )
                    ;

                Prepare lfabs_stmtInsertTblWthIndexedSiren From @lfabs_insertTblWthIndexedSirenQuery;
                execute lfabs_stmtInsertTblWthIndexedSiren
                        using @lfabs_idEntities
                    ;	
                Deallocate prepare lfabs_stmtInsertTblWthIndexedSiren;
                leave lfabs_main;
            End if;

        end;

        lfabs_findByAccountsRef: Begin
            -- recheche des comptes par la référence de compte
            if @lfabs_fieldAccountRef Is Null then
                -- pas de recherche par référénce de compte
                Set @lfabs_tstAccRefEmpty = '';
                leave lfabs_findByAccountsRef;
            End if;

-- call CASH_PRINT('Find Accounts by ref', 'lfabs_debug');

            Set @lfabs_tstAccRefEmpty = Concat('        And Trim(Coalesce(LSRC.`', @lfabs_fieldAccountRef, '`, '''' )) = '''' ');

            Drop Temporary Table If Exists TMP_LFABS_ACCOUNTS_FOUND_BYREF;
            Create Temporary Table If Not Exists TMP_LFABS_ACCOUNTS_FOUND_BYREF (
                        ACCOUNTS_ID_ACCOUNTS Int Unsigned Not Null
                        , LOADER_BASE_TABLE_ID Int Unsigned Null
                        , Index(ACCOUNTS_ID_ACCOUNTS)
                        , Index(LOADER_BASE_TABLE_ID)
                    )
                ;
            
            Set @lfabs_findAccountByRefQuery  = Concat(
                        'Insert Into TMP_LFABS_ACCOUNTS_FOUND_BYREF ( '
                        , ' ACCOUNTS_ID_ACCOUNTS, LOADER_BASE_TABLE_ID '
                        , ') '
                        , 'Select '
                        , '  ACC.ID_ACCOUNTS, LSRC.`', @lfabs_fieldIdTableSrc,'` '
                        , 'From LOADER_STATUS STS '
                        , ' Inner Join `',@lfabs_tableSrc , '` LSRC '
                        , '     On STS.ID_LOADER_STATUS = LSRC.`', @lfabs_fieldIdLoaderStatus, '` '
                        , ' Inner Join ACCOUNTS ACC '
                        , '     On LSRC.`', @lfabs_fieldAccountRef, '` = ACC.ACCOUNTS_REF '
                        , '     And ACC.ENTITIES_ID_ENTITIES = ? '

                        , ' Left Join `', @lfabs_tableAccountFound,'` tar '
                        , '     On tar.ACCOUNTS_ID_ACCOUNTS = ACC.ID_ACCOUNTS '
                        , 'Where  '
                        , ' STS.LOADER_STATUS_BATCH_NUM = ? '
                        , ' And STS.LOADER_STATUS_ERRCOUNT = 0 '
                        , ' And Trim(Coalesce(LSRC.`', @lfabs_fieldAccountRef, '`, '''')) <> '''' '

                        , ' And tar.ACCOUNTS_ID_ACCOUNTS Is Null '
--                         , ' And Not Exists( '
--                         , '     Select tar.ACCOUNTS_ID_ACCOUNTS '
--                         , '     From `', @lfabs_tableAccountFound,'` tar '
--                         , '     Where tar.ACCOUNTS_ID_ACCOUNTS = ACC.ID_ACCOUNTS '
--                         , '     Limit 1 '
--                         , ' ) '
                    )
                ;
            -- debogage
--             Select  @lfabs_findAccountByRefQuery;
--             leave lfabs_main;

            Prepare lfabs_stmtFindAccountByRefQuery From @lfabs_findAccountByRefQuery;
            execute lfabs_stmtFindAccountByRefQuery
                    Using @lfabs_idEntities, @lfabs_batchnum
                ;	
            Deallocate prepare lfabs_stmtFindAccountByRefQuery;

            Set @lfabs_insertAccountFoundByRefQuery  = Concat(
                        'Insert Into `', @lfabs_tableAccountFound, '` ( '
                        , ' ACCOUNTS_ID_ACCOUNTS '
                        , ' , LOADER_BASE_TABLE_ID '
                        , ' , LOADER_STATUS_ID_LOADER_STATUS '
                        , ') '
                        , 'Select '
                        , '  tsrc.ACCOUNTS_ID_ACCOUNTS, tsrc.LOADER_BASE_TABLE_ID '
                        , '  , LSRC.`', @lfabs_fieldIdLoaderStatus,'` '
                        , 'From TMP_LFABS_ACCOUNTS_FOUND_BYREF tsrc '
                        , '  Inner Join `', @lfabs_tableSrc,'` LSRC '
                        , '     On tsrc.LOADER_BASE_TABLE_ID = LSRC.`', @lfabs_fieldIdTableSrc,'` '
                    )
                ;
            Prepare lfabs_insertAccountFoundByRefQuery From @lfabs_insertAccountFoundByRefQuery;
            execute lfabs_insertAccountFoundByRefQuery
                ;	
            Deallocate prepare lfabs_insertAccountFoundByRefQuery;

            Drop Temporary Table If Exists TMP_LFABS_ACCOUNTS_FOUND_BYREF;

        End ;


        lfabs_prepareSiren : Begin
            -- creation d'une table temporaraire avec les siren preparés en cour d'import
            Drop Table if Exists TMP_LOADER_LOADER_PREPARED_SIREN1;
            Create Temporary Table If Not Exists TMP_LOADER_LOADER_PREPARED_SIREN1 (
                        LOADER_STATUS_ID_LOADER_STATUS Int Unsigned Not Null
                        , LOADER_BASE_TABLE_ID Int Unsigned Not Null
                        , CONTACTS_BUSINESS_SIRET Varchar(15) Not Null
                        , ONLY_MAIN_CONTACT SmallInt Not Null Default 0
                        , Index(LOADER_STATUS_ID_LOADER_STATUS )
                        , Index(LOADER_BASE_TABLE_ID )
                        , Index(CONTACTS_BUSINESS_SIRET)
                    )
                ;
            Drop Table if Exists TMP_LOADER_LOADER_PREPARED_SIREN2;
            Create Temporary Table If Not Exists TMP_LOADER_LOADER_PREPARED_SIREN2 (
                        LOADER_STATUS_ID_LOADER_STATUS Int Unsigned Not Null
                        , LOADER_BASE_TABLE_ID Int Unsigned Not Null
                        , CONTACTS_BUSINESS_SIRET Varchar(15) Not Null
                        , ONLY_MAIN_CONTACT SmallInt Not Null Default 0
                        , Index(LOADER_STATUS_ID_LOADER_STATUS )
                        , Index(LOADER_BASE_TABLE_ID )
                        , Index(CONTACTS_BUSINESS_SIRET)
                    )
                ;
            
            If @lfabs_fieldMainCtcOnly Is Null Then
               Set @lfabs_fieldMainCtcOnly = ' 0 '; --  par defaut rechercher sur tous les contacts des comptes
            Else
               Set @lfabs_fieldMainCtcOnly = Concat(' Coalesce(LSRC.`' , @lfabs_fieldMainCtcOnly, '`, 0) ');

            End If;

            Set @lfabs_isrtLdrTblWthIndexedSirenQuery = Concat(
                        'Insert Into `TMP_LOADER_LOADER_PREPARED_SIREN1` ('
                        , ' LOADER_STATUS_ID_LOADER_STATUS  '
                        , ' , LOADER_BASE_TABLE_ID '
                        , ' , CONTACTS_BUSINESS_SIRET '
                        , ' , ONLY_MAIN_CONTACT '
                        , ') '
                        , 'Select STS.ID_LOADER_STATUS '
                        , ' , LSRC.`', @lfabs_fieldIdTableSrc,'` '
--                         , ' , Case When Length(LSRC.`', @lfabs_fieldSiren,'`) In (9, 14) Then Substring(LSRC.`', @lfabs_fieldSiren,'`, 1, 9) Else LSRC.`', @lfabs_fieldSiren,'` End '
                        , ' , Case When Length(@lfabs_siret := Trim(LSRC.`', @lfabs_fieldSiren,'`)) In (9, 14) Then Substring(@lfabs_siret, 1, 9) Else LSRC.`', @lfabs_fieldSiren,'` End '
                        , ' , Case When ' ,  @lfabs_fieldMainCtcOnly, ' = 0 Then 0 Else 1 End  ' -- on force une valeur 0 / 1
                        , 'From LOADER_STATUS STS '
                        , ' Inner Join `',@lfabs_tableSrc , '` LSRC '
                        , '     On STS.ID_LOADER_STATUS = LSRC.`', @lfabs_fieldIdLoaderStatus, '` '
                        , 'Where  '
                        , ' STS.LOADER_STATUS_BATCH_NUM = ? '
                        , ' And STS.LOADER_STATUS_ERRCOUNT = 0 '
                        , ' And Trim(Coalesce(LSRC.`', @lfabs_fieldSiren,'`, ''''))<>'''' '
                        , @lfabs_tstAccRefEmpty 
                    )
                ;

--             select @lfabs_isrtLdrTblWthIndexedSirenQuery;
--             leave lfabs_main;

            Prepare lfabs_isrtLdrTblWthIndexedSiren From @lfabs_isrtLdrTblWthIndexedSirenQuery;
            execute lfabs_isrtLdrTblWthIndexedSiren
                    using @lfabs_batchnum
                ;	
            Deallocate prepare lfabs_isrtLdrTblWthIndexedSiren;

            -- limitation de l'utilisation des table temporaire, on duplique

            Insert Into TMP_LOADER_LOADER_PREPARED_SIREN2 (
                    LOADER_STATUS_ID_LOADER_STATUS
                    , LOADER_BASE_TABLE_ID
                    , CONTACTS_BUSINESS_SIRET
                    , ONLY_MAIN_CONTACT
                )
            Select
                LOADER_STATUS_ID_LOADER_STATUS
                , LOADER_BASE_TABLE_ID
                , CONTACTS_BUSINESS_SIRET
                , ONLY_MAIN_CONTACT
            From TMP_LOADER_LOADER_PREPARED_SIREN1
            ;
        End;

        lfabs_findbySiren: Begin
            -- insertion des comptes par le biais du siren
            -- recherche secondaire
            -- exclusion eventuel des comptes trouvés avant
            -- le test du "siren" ne s'applique que si
            --      - la référence de compte n'est pas fournis
            --      - le siren/siret fourni fait éxactement 14 ou 9 caracteres
            -- on compare alors que les 9 1ers caracteres du fichier aux 9 1ers
            -- caracteres des données dans la table CONTACTS_BUSINESS


            Drop Temporary Table If Exists TMP_LFABS_ACCOUNTS_FOUND_BYSIREN;
            Create Temporary Table If Not Exists TMP_LFABS_ACCOUNTS_FOUND_BYSIREN (
                        ACCOUNTS_ID_ACCOUNTS Int Unsigned Not Null
                        , LOADER_BASE_TABLE_ID Int Unsigned Null
                        , Index(ACCOUNTS_ID_ACCOUNTS)
                        , Index(LOADER_BASE_TABLE_ID)
                    )
                ;

            Set @lfabs_findAccountBySirenQuery  = Concat(''
                        , 'Insert Into TMP_LFABS_ACCOUNTS_FOUND_BYSIREN ( '
                        , ' ACCOUNTS_ID_ACCOUNTS, LOADER_BASE_TABLE_ID '
                        , ') '
--                         'explain '
                        , 'Select ACC.ID_ACCOUNTS '
                        , ' , ( '
                        , '     Select TLLPS1.LOADER_BASE_TABLE_ID '
                        , '     From TMP_LOADER_LOADER_PREPARED_SIREN1 TLLPS1 '
                        , '         Inner Join  `', @lfabs_TableWithIndexedSiren, '` TCBPS1 '
                        , '             On TLLPS1.CONTACTS_BUSINESS_SIRET = TCBPS1.CONTACTS_BUSINESS_SIRET '
                        , '     Where ACC.ID_ACCOUNTS = TCBPS1.ACCOUNTS_ID_ACCOUNTS'

                        -- ONLY_MAIN_CONTACT ne peut avoir que les valeur 1 ou 0
                        -- IS_MAIN_CONTACTS ne peut avoir que les valeur 1 ou 0
                        -- on donc l'un des 2 cas
                        --  -> IS_MAIN_CONTACTS In (1, 1) =>  contact principaux uniquement
                        --  -> IS_MAIN_CONTACTS In (1, 0) => tous les contacts du compte

                        , '         And TCBPS1.IS_MAIN_CONTACTS In (1, TLLPS1.ONLY_MAIN_CONTACT)  '
                        , '     Limit 1 '
                        , ' ) '
                        , 'From ACCOUNTS ACC '

                        , '  Left Join `', @lfabs_tableAccountFound,'` tar '
                        , '     On tar.ACCOUNTS_ID_ACCOUNTS = ACC.ID_ACCOUNTS '

                        , 'Where ACC.ENTITIES_ID_ENTITIES = ? ' -- 1 = entity
                        , ' And Exists ( '
                        , '     Select TLLPS2.LOADER_BASE_TABLE_ID '
                        , '     From TMP_LOADER_LOADER_PREPARED_SIREN2 TLLPS2 '
                        , '         Inner Join  `', @lfabs_TableWithIndexedSiren, '` TCBPS2 '
                        , '             On TLLPS2.CONTACTS_BUSINESS_SIRET = TCBPS2.CONTACTS_BUSINESS_SIRET '
                        , '     Where ACC.ID_ACCOUNTS = TCBPS2.ACCOUNTS_ID_ACCOUNTS '
                        , '         And TCBPS2.IS_MAIN_CONTACTS In (1, TLLPS2.ONLY_MAIN_CONTACT)  '
                        , '     Limit 1 '
                        , ' ) '
                        , ' And tar.ACCOUNTS_ID_ACCOUNTS Is Null '
--                         , ' And Not Exists( '
--                         , '     Select tar.ACCOUNTS_ID_ACCOUNTS '
--                         , '     From `', @lfabs_tableAccountFound,'` tar '
--                         , '     Where tar.ACCOUNTS_ID_ACCOUNTS = ACC.ID_ACCOUNTS '
--                         , '     Limit 1 '
--                         , ' ) '
                    )
                ;
--             select @lfabs_findAccountBySirenQuery;
--             leave lfabs_main;

            Prepare lfabs_stmtFindAccountBySirenQuery From @lfabs_findAccountBySirenQuery;
            execute lfabs_stmtFindAccountBySirenQuery
--                     Using @lfabs_batchnum, @lfabs_idEntities, @lfabs_batchnum
                    Using @lfabs_idEntities
                ;	
            Deallocate prepare lfabs_stmtFindAccountBySirenQuery;

            Set @lfabs_insertAccountFoundBySirenQuery  = Concat(
                        'Insert Into `', @lfabs_tableAccountFound, '` ( '
                        , ' ACCOUNTS_ID_ACCOUNTS '
                        , ' , LOADER_BASE_TABLE_ID '
                        , ' , LOADER_STATUS_ID_LOADER_STATUS '
                        , ') '
                        , 'Select '
                        , '  tsrc.ACCOUNTS_ID_ACCOUNTS, tsrc.LOADER_BASE_TABLE_ID '
                        , '  , LSRC.`', @lfabs_fieldIdLoaderStatus,'` '
                        , 'From TMP_LFABS_ACCOUNTS_FOUND_BYSIREN tsrc '
                        , '  Inner Join `', @lfabs_tableSrc,'` LSRC '
                        , '     On tsrc.LOADER_BASE_TABLE_ID = LSRC.`', @lfabs_fieldIdTableSrc,'` '
                    )
                ;
--             select @lfabs_insertAccountFoundBySirenQuery;
--             leave lfabs_main;
            Prepare lfabs_insertAccountFoundBySirenQuery From @lfabs_insertAccountFoundBySirenQuery;
            execute lfabs_insertAccountFoundBySirenQuery
                ;	
            Deallocate prepare lfabs_insertAccountFoundBySirenQuery;

            Drop Temporary Table If Exists TMP_LFABS_ACCOUNTS_FOUND_BYSIREN;
        End;
        

    end;
End//
Delimiter ;