[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