Files
GMW/GMW_DB/dbo/Stored Procedures/stp_BORI_caricaDatiBolla.sql
T

191 lines
6.6 KiB
PL/PgSQL

/*****************************************
* STORED stp_BORI_caricaDatiBolla
*
* richiama la stored di caricamento da AS400 x la bolla indicata
*
* Steamware, S.E.L.
* mod: 2013.04.15
*
****************************************/
CREATE PROCEDURE [dbo].[stp_BORI_caricaDatiBolla]
(
@RaggrMagazz NVARCHAR(2) ,
@GruppoBolle NVARCHAR(1) ,
@NumeroBolla NVARCHAR(6) ,
@DataBolla NVARCHAR(8) ,
@Particolare NVARCHAR(15)
)
AS
SET NOCOUNT ON;
--DECLARE @RaggrMagazz AS NVARCHAR(2) = -- N'SP' oppure = N'TK'
--DECLARE @GruppoBolle AS NVARCHAR(1) = N'0'
--DECLARE @NumeroBolla AS NVARCHAR(6) = N'678'
--DECLARE @DataBolla AS NVARCHAR(8) = N'20110421'
--DECLARE @Particolare AS NVARCHAR(15) = N'P00528536146'
-- ATTENZIONE!!! i parametri non devono essere nulli altrimenti la stringa ritornata è nulla
-- Prima cancello i dati della se già presenti bolla poi li carico
DELETE RawData.BORI202J
WHERE CDMFS = @RaggrMagazz
AND GRBOS = @GruppoBolle
AND NRBOS = @NumeroBolla
AND DTBOS = @DataBolla
AND CDARS = @Particolare
DECLARE @SQL AS NVARCHAR(4000);
DECLARE @SqlOK AS INT;
DECLARE @As400File AS NVARCHAR(50) = ''; -- Libreria e File AS400
DECLARE @As400Linked AS NVARCHAR(50) = ''; -- Linked Server AS400
SET @SqlOK = 0;
/*
Prima estraggo i dati della bolla dal file in AS400 in una tabella temporanea
Poi va letta la tabella temporanea per creare i dati per la stampa Odette
NON VA BENE, SE ESEGUONO IN DUE LA STAMPA PUO ANDARE IN CONFLITTO
--IF OBJECT_ID(N'tempdb..##TabTemp') IS NOT NULL -- ##TabTemp Tabella temporanea globale altrimenti non riesco ad usarla
-- DROP TABLE ##TabTemp;
-- SET @SQL = 'SELECT * INTO ##TabTemp FROM OPENQUERY(AS400XXXX,
*/
-- In base al nome del DB allora setto Linked Server e file di AS400
SET @As400Linked = ( SELECT dbo.f_getLikedAS400(DB_NAME()) );
-- SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME() , OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) ) )
SET @As400File = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME(), 'dbo.stp_BORI_caricaDatiBolla' ) );
BEGIN TRY
SET @SQL = 'INSERT INTO RawData.BORI202J SELECT * FROM OPENQUERY(' -- OPENQUERY(AS400XXXX,'SELECT ...
SET @SQL = @SQL + @As400Linked + ',
''SELECT DISTINCT
CDMFS
,GRBOS
,DTBOS
,NRBOS
,CDARS
,NRRGS
,CDINB
,RA1ND
,RA2ND
,CAPND
,CITND
,RASCL
,INDCL
,CAPCL
,LOCCL
,PROCL
,INEND
,CRAGCL
,TELND
,CCDMOL
,CCDPTR
,EPLAVO
,NRC1B
,ECMM01
,DEPAR
,RCARTC
,PERND
,CCDET1
,ECDNAE
,ECDNA1
,EESPMD
,PELDB
,QTCNS
,ECLAQP
,EPNETT
,FCDI01
,'''''''' AS OCDODM
,CCFOE1
FROM ' + @As400File
SET @SQL = @SQL + ' WHERE ATV08 <> ''''A''''' -- escludo bolle annullate
-- commemntare le righe successive per estrarre tutto
-- Parametri di selezione della bolla
SET @SQL = @SQL + ' AND CDMFS = ''''' + @RaggrMagazz + ''''' '
SET @SQL = @SQL + ' AND GRBOS = ''''' + @GruppoBolle + ''''' '
SET @SQL = @SQL + ' AND NRBOS = ' + @NumeroBolla + ' '
SET @SQL = @SQL + ' AND DTBOS = ' + @DataBolla + ' '
SET @SQL = @SQL + ' AND CDARS = ''''' + @Particolare + ''''' '
SET @SQL = @SQL + ''' ) OPTION (RECOMPILE)';
EXEC dbo.sp_executesql @SQL -- commentare per test
END TRY
BEGIN CATCH
-- PRINT ERROR_NUMBER()
SET @SqlOK = ERROR_NUMBER();
-- Uso RAISERROR mandare in errore la procedura e x per tornare le info
-- sull'errore originale che ha portato l'esecuzione nel blocco CATCH
--DECLARE @ErrorMessage NVARCHAR(4000);
--DECLARE @ErrorSeverity INT;
--DECLARE @ErrorState INT;
--SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
--RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState); -- Se non uso RAISERROR la procedura non mi da errore es. se schedulata
END CATCH
-- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK
INSERT INTO RawData.AS400_Comandi
SELECT GETDATE(), 'stp_BORI_caricaDatiBolla', REPLACE(@SQL,' ',' '), @SqlOK;
/* NEW 2013/05/01
Aggiorno il change index in base alla data validità e data bolla
leggo dalla tabella RawData.ANODM00F aggiornata da import AS400 ( potrei aggiornarla anche qui )
*/
IF @SqlOK = 0 -- se import Bolle è OK
BEGIN
;WITH cte AS -- cte con inizio e fine validità
(
SELECT OCDPAR,
OCDODM,
ODTVAL,
ISNULL(( SELECT MIN(ODTVAL)
FROM RawData.ANODM00F AS T2
WHERE T2.OCDPAR = v.OCDPAR AND T2.ODTVAL > v.ODTVAL )
,'20993112') AS ODTVALEND
FROM RawData.ANODM00F AS v
)
UPDATE b
SET OCDODM = c.OCDODM
FROM RawData.BORI202J AS b
INNER JOIN cte AS c
ON b.CDARS = c.OCDPAR AND b.DTBOS >= c.ODTVAL AND b.DTBOS < c.ODTVALEND
WHERE CDMFS = @RaggrMagazz -- aggiorno solo la bolla corretta
AND GRBOS = @GruppoBolle
AND NRBOS = @NumeroBolla
AND DTBOS = @DataBolla
AND CDARS = @Particolare
/* query di test
;WITH cte AS
(
SELECT OCDPAR,
OCDODM,
ODTVAL,
ISNULL(( SELECT MIN(ODTVAL) FROM RawData.ANODM00F AS T2
WHERE T2.OCDPAR = v.OCDPAR AND T2.ODTVAL > v.ODTVAL )
,'20993112') AS ODTVALEND
FROM RawData.ANODM00F AS v
)
SELECT b.*, c.OCDODM FROM RawData.BORI202J AS b
LEFT JOIN cte AS c
ON b.CDARS = c.OCDPAR AND b.DTBOS >= c.ODTVAL AND b.DTBOS < c.ODTVALEND
*/
END
-- Carico i dati della Temp table nel file di appoggio
-- INSERT INTO RawData.BORI202J
-- SELECT * FROM ##TabTemp
RETURN