Re: [firebase-br] máximo para o número de trigge rs por tabela

Mário Reis via lista <[email protected]>
Newsgroups gmane.comp.db.firebase.portuguese
Message-ID <CAF_dzrkzSnLs1_92Lf=k34t7bTP2giDcRs4LFXPNMCPuyFzUMw@mail.gmail.com>
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 <[email protected]> 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.
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.