简体   繁体   中英

Will the temp table be a dynamic one?

I have created sql's which mimic an RPGLE program which displays data in work process. My question is will this code be dynamic and no need for me to do anything, or must this be run constantly? this creates a *PGM object CLE.

 CREATE table RTRINTx(
    PROGR1PST int, PROGR1PUN int, PROGR1TOD int, PROGR1TUN int, PROGR1TOM int, PROGR1MUN int, 
    LASGR1PST int, LASGR1PUN int, LASGR1TOD int, LASGR1TUN int, LASGR1TOM int, LASGR1MUN int, 
    PCKGR1PST int, PCKGR1PUN int, PCKGR1TOD int, PCKGR1TUN int, PCKGR1TOM int, PCKGR1MUN int, 
    ASSGR1PST int, ASSGR1PUN int, ASSGR1TOD int, ASSGR1TUN int, ASSGR1TOM int, ASSGR1MUN int, 
    SHPGR1PST int, SHPGR1PUN int, SHPGR1TOD int, SHPGR1TUN int, SHPGR1TOM int, SHPGR1MUN int, 
    HLDGR1PST int, HLDGR1PUN int, HLDGR1TOD int, HLDGR1TUN int, HLDGR1TOM int, HLDGR1MUN int);    

-- Engraving Processing
-- Count for Previous Day
Insert into RTRINTx(PROGR1PST)
SELECT count(*) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTCCDTA.OETRA99  
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND (otCOM# = OHCOM# AND OTORD#= OHORD# AND ottrnc = 'AQC')
AND TSSTAT IN('AEP','BGE')  
AND OHORDT IN('RTR','INT','SAM') 
AND OHREQD < replace(char(current date, iso), '-', '')  
AND OHHLDC = ' ' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP'));

-- Quantity Total Previous Day
update RTRINTx set PROGR1PUN = 
(select COALESCE(SUM(OdQty#),0) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTDTA.OEORD1  
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND OHCOM# = ODCOM# AND OHORD# = ODORD#  
AND TSSTAT IN('AEP','BGE')  
AND OHORDT IN('RTR','INT','SAM')  
AND OHREQD < replace(char(current date, iso), '-', '')  
AND OHHLDC = ' '  AND ODPRLC = 'ENG'  
AND substr(odprt#,1,5) <> 'NOENG' 
AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP')));

-- Count for Today
Update RTRINTx set PROGR1TOD = 
(SELECT count(*) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTCCDTA.OETRA99  
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND (otCOM# = OHCOM# AND OTORD#= OHORD# AND ottrnc = 'AQC')
AND TSSTAT IN('AEP','BGE')  
AND OHORDT IN('RTR','INT','SAM') 
AND OHREQD = replace(char(current date, iso), '-', '')  
AND OHHLDC = ' ' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP')));

-- Quantity Total Previous Day
Update RTRINTx set PROGR1TUN =
(SELECT COALESCE(SUM(OdQty#),0) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTDTA.OEORD1
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND OHCOM# = ODCOM# AND OHORD# = ODORD#
AND TSSTAT IN('AEP','BGE')
AND OHORDT IN('RTR','INT','SAM')
AND OHREQD = replace(char(current date, iso), '-', '')
AND OHHLDC = ' ' AND ODPRLC = 'ENG'
AND substr(odprt#,1,5) <> 'NOENG' 
AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP')));

-- Count for Tomorrow
Update RTRINTx set PROGR1TOM=
(SELECT count(*) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTCCDTA.OETRA99  
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND (otCOM# = OHCOM# AND OTORD#= OHORD# AND ottrnc = 'AQC')
AND TSSTAT IN('AEP','BGE')  
AND OHORDT IN('RTR','INT','SAM') 
AND OHREQD =cast(Right(Replace(Char(current date + 1 day, ISO), '-', ''),8)as int) 
AND OHHLDC = ' ' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP')));

-- Quantity Total Tomorrow
Update RTRINTx set PROGR1MUN =
(SELECT COALESCE(SUM(OdQty#),0) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTDTA.OEORD1
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# 
AND OHCOM# = ODCOM# AND OHORD# = ODORD#
AND TSSTAT IN('AEP','BGE')
AND OHORDT IN('RTR','INT','SAM')
AND OHREQD=cast(Right(Replace(Char(current date + 1 day, ISO), '-', ''),8)as int) 
AND OHHLDC = ' '
AND ODPRLC = 'ENG'
AND substr(odprt#,1,5) <> 'NOENG' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a    
WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP')));

Those statements are static. They will have to be executed periodically in order to keep the data up to date.

If you want dynamic updates you could convert those statements into a single view that will recalculate simply by being accessed.

I think what you need to use is MQT (Materialized Query Tables).

CREATE TABLE INVTOTALS AS                              
(WITH TEMP AS (SELECT DEC(SUM(QTY),7,0) as TOTAL,      
PART FROM INVDETL                                      
 GROUP BY PART)                                        
SELECT INVMAST.PART, DESC, PRICE, COST, TOTAL FROM INVMAST 
 LEFT JOIN TEMP ON INVMAST.PART = TEMP.PART)           
 DATA INITIALLY DEFERRED                               
 REFRESH DEFERRED    
 ENABLE QUERY OPTIMIZATION                                  
 MAINTAINED BY USER

To refresh this table all you need to do in your program is

REFRESH TABLE INVTOTALS 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM