191 lines
6.6 KiB
PL/PgSQL
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
|
|
|