[firebase-br] A m/ trigguer que deverá fornecer o prximo N.º de Linha s/gaps no meio, mas não dispara dá erro primeiro em new.linha
Mário Reis
mariodosreyx em gmail.com
Sexta Dezembro 2 15:44:48 -03 2022
Boa tarde companheiros,
Tenho este mesmo código rodando em dezenas de ouiyras situações. Aqui deu.me
uma branca devo estar a esquecer algo muito importante:
CREATE TABLE LLIVRODEPONTO (
LINHA SMALLINT NOT NULL,
IDUSER SMALLINT NOT NULL,
USLOGIN VARCHAR(10) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
MOVIMENTO CHAR(1) CHARACTER SET WIN1252 COLLATE PXW_INTL850,
DESCRITIVO VARCHAR(35) CHARACTER SET WIN1252 COLLATE PXW_INTL850,
DTHRSVR TIMESTAMP,
DTHRCLI TIMESTAMP);
ALTER TABLE LLIVRODEPONTO ADD CONSTRAINT PK_LLIVRODEPONTO PRIMARY KEY
(LINHA,IDUSER,USLOGIN);
SET TERM ^ ;
CREATE TRIGGER BI_LLIVRODEPONTO_LINHA FOR LLIVRODEPONTO
ACTIVE BEFORE
INSERT
POSITION 0
AS
DECLARE VARIABLE NEW_ID_USER TYPE OF COLUMN LLIVRODEPONTO.IDUSER;
DECLARE VARIABLE NEW_LINHA TYPE OF COLUMN LLIVRODEPONTO.LINHA;
BEGIN
-- IF (NEW.LINHA IS NULL) THEN
-- NEW.LINHA = GEN_ID(LLIVRODEPONTO_LINHA_GEN1, 1);
/* Procedure body */
NEW_ID_USER=NEW.IDUSER;
IF (NEW.LINHA IS NULL) THEN
BEGIN
SELECT MAX(Ll.LINHA) FROM LLIVRODEPONTO Ll
WHERE Ll.IDUSER =:NEW_ID_USER
AND Ll.USLOGIN=CURRENT_USER
AND Ll.DTHRSVR=CURRENT_TIMESTAMP
INTO :NEW_LINHA;
IF (:NEW_LINHA IS NULL) THEN
NEW_LINHA = 1 ;
ELSE
NEW.LINHA =:NEW_LINHA + 1;
END
END^
SET TERM ; ^
Onde me perdi eu e em quê? Costuma funcionar sempre que não posso ter
falhas na numeração Faturação por exemplo!?
Estou a ficar maluco!
Alguém pode ajudar-me? Obrigado
Com os meus melhores cumprimentos
Mário Agostinho Reis
919262146
Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.
Mais detalhes sobre a lista de discussão lista