[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