[firebase-br] máximo para o número de triggers por tabela

Mário Reis mariodosreyx em gmail.com
Terça Outubro 17 18:04:55 -03 2023


Desculpem, esqueci de juntar a função. Aqui fica para quem a quiser usar
com um pedido caso encontrem algum erro queiram por favor informar-me.
Obrigado
CREATE FUNCTION IS_VAL_IBAN(
  IN_IBAN VARCHAR(50) CHARACTER SET WIN1252 COLLATE PXW_INTL850)
RETURNS BOOLEAN
AS
DECLARE VARIABLE V INTEGER;
DECLARE VARIABLE L INTEGER;
DECLARE VARIABLE INUMBER BIGINT;
DECLARE VARIABLE ILEN INTEGER;
DECLARE VARIABLE IREST INTEGER;
DECLARE VARIABLE SV4IBAN VARCHAR(4) COLLATE PXW_INTL850;
DECLARE VARIABLE ALFA VARCHAR(15);
BEGIN

 In_iban = Upper(:In_iban);
 In_iban=REPLACE(:In_iban,' ', '');
 IF (POSITION('IBAN',In_iban) > 0) THEN
  In_iban=REPLACE(:In_iban,'IBAN', '');
  --Salva 1.ºs 4 digits do IBAN
  SV4IBAN=SUBSTRING(In_iban From 1 For 4);
  --Não tenho DELETE uso REPLACE em seu lugar
  --Apaga 1.ºs 4 digits do IBAN
  In_iban=REPLACE(:In_iban,:SV4IBAN, ''); --  DELETE(iban, 1, 4);
  --Finalmente adiciona 1.ºs 4 digits do IBAN no final da da string
  /* Nova configuração do IBAN  */
  IF (IS_DIGIT(:IN_IBAN)) THEN
   In_iban=:In_iban||:SV4IBAN ; --concatena no final

  --Converte os ALFAs no novo IBAN em inteiros
  In_iban= SF$ALFA_TO_INT(:In_iban);

  v=1;
  l=9;
  irest=0;
  alfa='';
  iLen=CHAR_LENGTH(:In_iban);

  WHILE (v<=iLen) do
   BEGIN

     IF (l>iLen) THEN
      l=iLen;

     alfa=alfa||SUBSTRING(In_iban From  v FOR l);
     INUMBER=CAST(:alfa as INTEGER);
     IREST=MOD(:INUMBER,97);
     v=v + l;
     alfa=CAST(:IREST as VARCHAR(15) );
     l=9-CHAR_LENGTH(:alfa);

   END

   If (:IREST=1) THEN
    RETURN TRUE;
   Else
    RETURN FALSE ;


END;
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.


Mário Reis <mariodosreyx em gmail.com> escreveu no dia terça, 17/10/2023 à(s)
17:00:

> Há um limite máximo para o número de triggers por tabela?
> A questão é a seguinte
> CREATE TRIGGER SOCIOS_BIU_IB FOR SOCIOS
> ACTIVE BEFORE
>   INSERT OR
>   UPDATE
> POSITION 5
> AS
> DECLARE VARIABLE IBAN_OK BOOLEAN;
> BEGIN
>  IF ((NEW.IBAN is not null) OR (NEW.IBAN='')) Then
>
>   BEGIN
>    -- Validar o IBAN
>    IBAN_OK=IS_VAL_IBAN( NEW.IBAN ); -- Sql function Retorna "true"
> nos testes não dá  Erro
>
>    IF (IBAN_OK=FALSE) then
>     EXCEPTION STOP;  -- mensagem de erro
>
>   END
>
> END;
> A pergunta prende-se com o facto de,  quando activo(Active=TRUE) o trigger
> e vou gravar a recebo do lado do m/cliente delphi ou qq outro uma
> mensagem "no update query" ! Passo
> a para falso e passa bem, como faca quente em manteiga!!!  No
> debug interativo do lado do firebird não dá qualquer erro.
> Algumas ideias alguem me pode ajudar?
>
> 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