Dalla versione 4.12 Sigla crea due tabelle (SIGLIC e LICLOG) con campi Timestamp.
Il driver ODBC di Mysql gestisce correttamente questo campo solo dalla versione 3.51.28.
I driver antecedenti provocano un errore nella creazione della tabella.
martedì 29 ottobre 2013
lunedì 14 gennaio 2013
Sql Trigger
Di seguito la versione SQL del trigger per l'assegnazione del registro iva nel campo CIG all'inserimento e variazione di un record di TESDOCUM.
CREATE trigger TESDOCUM_TRG1 on TESDOCUM for INSERT, update
as
update TESDOCUM SET CIG=(select MAX(REGISTRIVA)
from CAUSCONT
where CAUSCONTAB=CODICE
and NUMERO = ( select NUMERO FROM inserted) )
where NUMERO = ( select NUMERO FROM inserted)
venerdì 11 gennaio 2013
Oracle Trigger
Ieri mi sono trovato a dover fare un trigger su Oracle da zero e ho avuto qualche difficoltà sintattica e concettuale.
Dopo aver scritto il mio trigger e compilato correttamente, durante l'uso veniva generato un errore :
ORA-04098: trigger name is invalid and failed re-validation.
Poichè il trigger era compilato correttamente sono dovuto ricorrere al comando "show errors trigger trigger_name;" per avere ulteriori chiarimenti sull'errore.
Una volta risolto il primo problema questo era il corpo del trigger :
update TESDOCUM SET CIG=(select MAX(REGISTRIVA)
from CAUSCONT
where CAUSCONTAB=CODICE
and NUMERO=:new.NUMERO)
where NUMERO=:new.NUMERO
Eseguendo il trigger sono incorso nell'errore
ORA-04091: table AM is mutating, trigger/function may not see it
select MAX(REGISTRIVA) into :new.CIG
from CAUSCONT
where :new.CAUSCONTAB=CODICE;
Dopo aver scritto il mio trigger e compilato correttamente, durante l'uso veniva generato un errore :
ORA-04098: trigger name is invalid and failed re-validation.
Poichè il trigger era compilato correttamente sono dovuto ricorrere al comando "show errors trigger trigger_name;" per avere ulteriori chiarimenti sull'errore.
Una volta risolto il primo problema questo era il corpo del trigger :
update TESDOCUM SET CIG=(select MAX(REGISTRIVA)
from CAUSCONT
where CAUSCONTAB=CODICE
and NUMERO=:new.NUMERO)
where NUMERO=:new.NUMERO
Eseguendo il trigger sono incorso nell'errore
ORA-04091: table AM is mutating, trigger/function may not see it
Era un problema concettuale. Non si può cambiare utilizzare o modificare un record del database mentre lo stesso record è oggetto di trigger.
I database danno accesso ai dati in lettura/scrittura con degli alias.
Alla fine il trigger è il seguente:
create or replace trigger tesdocum_trg1
before insert or update
on TESDOCUM
REFERENCING new AS new
before insert or update
on TESDOCUM
REFERENCING new AS new
FOR EACH ROW
WHEN (NEW.CAUSCONTAB IS NOT NULL)
begin
WHEN (NEW.CAUSCONTAB IS NOT NULL)
begin
select MAX(REGISTRIVA) into :new.CIG
from CAUSCONT
where :new.CAUSCONTAB=CODICE;
end tesdocum_trg1;
martedì 8 gennaio 2013
Variabili di configurazione database DB2
Dopo l'installazione di DB2 è necessario modificare dei valori di configurazione
I seguenti valori sono per le versioni di DB2 antecedenti alla 9
db2 update dbm cfg using QUERY_HEAP_SZ 1000
db2 update db cfg for DITTA1 using APPLHEAPSZ 512
db2 update db cfg for DITTA1 using PCKCACHESZ 128
db2 update db cfg for DITTA1 using BUFFPAGE 1024
db2 update db cfg for DITTA1 using NUM_IOCLEANERS 3
db2 update db cfg for DITTA1 using NUM_IOSERVERS 9
db2 update db cfg for DITTA1 using LOCKLIST 150
db2 update db cfg for DITTA1 using MAXAPPLS
db2 update db cfg for DITTA1 using AVG_APPLS
db2 update db cfg for DITTA1 using LOGFILSIZ 256
db2 update db cfg for DITTA1 using LOGPRIMARY
db2 update db cfg for DITTA1 using LOGSECOND
I seguenti valori sono per le versioni di DB2 uguali o superiori alla 9
db2 update dbm cfg using QUERY_HEAP_SZ 1000
db2 update db cfg for DITTA1 using APPLHEAPSZ 2048
db2 update db cfg for DITTA1 using APPL_MEMORY 40016
db2 update db cfg for DITTA1 using BUFFPAGE 16384
db2 update db cfg for DITTA1 using DBHEAP 600
db2 update db cfg for DITTA1 using NUM_IOCLEANERS 3
db2 update db cfg for DITTA1 using NUM_IOSERVERS 9
db2 update db cfg for DITTA1 using LOCKLIST 300
db2 update db cfg for DITTA1 using SORTHEAP 1024
db2 update db cfg for DITTA1 using AVG_APPLS
db2 update db cfg for DITTA1 using LOGFILSIZ 256
db2 update db cfg for DITTA1 using LOGPRIMARY
db2 update db cfg for DITTA1 using LOGSECOND
db2 update db cfg for DITTA1 using PCKCACHESZ 128
db2 update db cfg for DITTA1 using MAXAPPLS
I seguenti valori sono per le versioni di DB2 antecedenti alla 9
db2 update dbm cfg using QUERY_HEAP_SZ 1000
db2 update db cfg for DITTA1 using APPLHEAPSZ 512
db2 update db cfg for DITTA1 using PCKCACHESZ 128
db2 update db cfg for DITTA1 using BUFFPAGE 1024
db2 update db cfg for DITTA1 using NUM_IOCLEANERS 3
db2 update db cfg for DITTA1 using NUM_IOSERVERS 9
db2 update db cfg for DITTA1 using LOCKLIST 150
db2 update db cfg for DITTA1 using MAXAPPLS
db2 update db cfg for DITTA1 using AVG_APPLS
db2 update db cfg for DITTA1 using LOGFILSIZ 256
db2 update db cfg for DITTA1 using LOGPRIMARY
db2 update db cfg for DITTA1 using LOGSECOND
I seguenti valori sono per le versioni di DB2 uguali o superiori alla 9
db2 update dbm cfg using QUERY_HEAP_SZ 1000
db2 update db cfg for DITTA1 using APPLHEAPSZ 2048
db2 update db cfg for DITTA1 using APPL_MEMORY 40016
db2 update db cfg for DITTA1 using BUFFPAGE 16384
db2 update db cfg for DITTA1 using DBHEAP 600
db2 update db cfg for DITTA1 using NUM_IOCLEANERS 3
db2 update db cfg for DITTA1 using NUM_IOSERVERS 9
db2 update db cfg for DITTA1 using LOCKLIST 300
db2 update db cfg for DITTA1 using SORTHEAP 1024
db2 update db cfg for DITTA1 using AVG_APPLS
db2 update db cfg for DITTA1 using LOGFILSIZ 256
db2 update db cfg for DITTA1 using LOGPRIMARY
db2 update db cfg for DITTA1 using LOGSECOND
db2 update db cfg for DITTA1 using PCKCACHESZ 128
db2 update db cfg for DITTA1 using MAXAPPLS
venerdì 1 giugno 2012
Query Excel con parametri
Visto che mi dimentico sempre come si fa lo scrivo qui.
Per inserire un parametro in una query di Microsoft Query è necessario creare un nuovo criterio. Al posto del valore inserire una label fra parentesi quadre.
NB il nome del parametro deve essere diverso da qualsiasi campo delle tabelle coinvolte nella query.
All'apertura della query o del foglio excel collegato verrà richiesto il parametro.
Per inserire un parametro in una query di Microsoft Query è necessario creare un nuovo criterio. Al posto del valore inserire una label fra parentesi quadre.
NB il nome del parametro deve essere diverso da qualsiasi campo delle tabelle coinvolte nella query.
All'apertura della query o del foglio excel collegato verrà richiesto il parametro.
martedì 8 maggio 2012
Ricalcolo saldi contabili ( Tasalsot )
La seguente query ricrea TASALSOT ( che quindi deve essere svuotato prima ).
La query è per SqlServer
Per gli altri db basta spostituire il funzione ISNULL con VALUE,NVL,IFNULL a seconda del db
La query è per SqlServer
Per gli altri db basta spostituire il funzione ISNULL con VALUE,NVL,IFNULL a seconda del db
INSERT INTO TASALSOT
SELECT CODICE,PIACON.SOTTOCONTO,
ISNULL(LIRE.DARE,0) DARE,
ISNULL(LIRE.AVERE,0) AVERE,
ISNULL(LIRE.DAREINIT,0) DAREINIT,
ISNULL(LIRE.AVEREINIT,0) AVEREINIT,
ISNULL(LIRE.EDARE,0) EDARE,
ISNULL(LIRE.EAVERE,0) EAVERE,
ISNULL(LIRE.EDAREINIT,0) EDAREINIT,
ISNULL(LIRE.EAVEREINIT,0) EAVEREINIT,
DATULTMOV,
NUMULTMOV
FROM PIACON INNER JOIN ESC ON 1=1
LEFT OUTER JOIN (SELECT ESECOMPET,SOTTOCONTO,
SUM(CASE WHEN SEGNO='D' THEN IMPORTO ELSE 0 END) DARE,
SUM(CASE WHEN SEGNO='A' THEN IMPORTO ELSE 0 END) AVERE,
SUM(CASE WHEN SEGNO='D' AND TIPOCAUSAL='A' THEN IMPORTO ELSE 0 END) DAREINIT,
SUM(CASE WHEN SEGNO='A' AND TIPOCAUSAL='A' THEN IMPORTO ELSE 0 END) AVEREINIT,
SUM(CASE WHEN SEGNO='D' THEN EIMPORTO ELSE 0 END) EDARE,
SUM(CASE WHEN SEGNO='A' THEN EIMPORTO ELSE 0 END) EAVERE,
SUM(CASE WHEN SEGNO='D' AND TIPOCAUSAL='A' THEN EIMPORTO ELSE 0 END) EDAREINIT,
SUM(CASE WHEN SEGNO='A' AND TIPOCAUSAL='A' THEN EIMPORTO ELSE 0 END) EAVEREINIT,
MAX(DATAREG) DATULTMOV,
MAX(NUMERO) NUMULTMOV
FROM MOVCO
WHERE SOSPESO_SN='N'
AND TEMPORA_SN='N'
AND SIMULAZ_SN='N'
AND SOLOANA_SN<>'S'
GROUP BY ESECOMPET,SOTTOCONTO) LIRE ON ESC.CODICE=LIRE.ESECOMPET AND PIACON.SOTTOCONTO=LIRE. SOTTOCONTO
ORDER BY ESC.CODICE,PIACON.SOTTOCONTO
Diritti in Oracle
Per concedere un certo diritto su una tabella ad un altro user/schema la sintassi è la seguente :
GRANT <diritto> ON <tabella> TO < user>
GRANT SELECT ON PIACON TO DITTA1
GRANT <diritto> ON <tabella> TO < user>
GRANT SELECT ON PIACON TO DITTA1
Iscriviti a:
Post (Atom)