Trigger no hsql

7 respostas
dyorgio

dae raça do java…
olha soh!
gostaria de saber como faço para criar novas triggers nem um banco hsql
mais queria saber o sintaxe SQL e não o método java…
ah!
por favor…ponham um exemplo…
lá na documentação do hsql não tem exemplo…
vlw
criação de VIEWs tb são bem vindas

obrigado

7 Respostas

T

Peguei o manual do HSQLDB ( é um PDF que vem junto com o jar do HSQLDB ) e descobri que o cara não formatou direito o manual. Mesmo usando o Adobe Reader para fazer um copy do texto que não aparece, só consegui pegar isto:

CREATE TRIGGER <name> {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON <table> [FOR EACH

( falta alguma coisa depois do FOR EACH )

O que dá a impressão de que ninguém reclamou disso com ele (Fred Toussi) antes. Provavelmente ele iria dizer “mas é compatível com SQL ANSI 2000” ou outra coisa parecida, ou pior, “por que você não lê o fonte?”.

dyorgio

Na verdade thingol ja havia percebido esse problema…
porem se vc notar junto com a distribuição do hsql
alem do pdf vem um html…
la esta a sintaxe completa…
porem apesar de eu a ultilizar…não consigo criar o maldito trigger…
por ex :

create trigger trigger_teste

before insert

on tabela_teste

begin

update tabela_teste_cont set cont = cont + 1;

end;

da um erro no quantum informando que não encontra o final do “begin”…
ja tentei tirar o “;” do update mais não resolve…
socorro!!!
triggers são importantissimas para o banco que estou migrando

T
CREATE TRIGGER < name > {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON < table > [FOR EACH ROW] [QUEUE n] [NOWAIT] CALL <TriggerClass>;

TriggerClass is an application-supplied class that implements the org.hsqldb.Trigger interface e.g. “mypackage.TrigClass”. It is the fire method of this class that is invoked when the trigger event occurs. You should provide this class, which can have any name, and ensure that this TriggerClass is present in the classpath which you use to start hsqldb

Pelo que vi você é obrigado a criar uma classe, já que pela sintaxe “begin/end” não são aceitos (estou vendo o help da 1.7.2.11, não sei se na 1.7.3 isso é possível).

Ele ainda complica dizendo que não é bom estabelecer uma conexão JDBC dentro do trigger, para evitar deadlocks. Que coisa… O negócio é sair procurando um exemplo melhor que os que ele citou na documentação.

dyorgio

nossa…ninguem nesse forum sabe fazer triggers com o hsql!!!

T

Se você leu corretamente a documentação do HSQLDB viu que a implementação de triggers deve ser feita em Java (não em SQL), e que ela não é adequada para implementar nada que precise acessar alguma outra tabela, ou mesmo linhas dessa mesma tabela onde ocorreu o “trigger”. Há o exemplo listado na documentação.
Portanto não use triggers em HSQLDB para implementar, por exemplo, regras de negócio ou outras coisas.
Mesmo algo super-inocente como incrementar um campo “total” em uma outra tabela, sendo que um campo “valor” foi alterado nesta tabela onde você configurou o trigger, vai dar problemas (pois você vai ter de criar uma nova conexão JDBC para a própria base, o que é desaconselhado na documentação).
Ou seja, tente não usar triggers (não dá para portar TUDO do Oracle para o HSQLDB :stuck_out_tongue: )

dyorgio

valeu thingol!!!
é foda…eu aqui no trampo só uso oracle…
daiqueria algo parecido…
é foda cara…
tens alguma dica para usar algo do tipo “ON UPDATE” no hsql?
aquele banco da IBM o Cloudseiláoque saiu uma versão gratis…
é feito em java tb…
mais é 60MB…
já trabalhasse com ele?
valeu!!!
pensei que por ser em java o hsql era mais espertinhu…
[]'s dyorgio

keller

Fala Dyorgio hahahahah :lol:
Cara tenta o Firebird muito bom esse SGBD.
:arrow: http://firebird.sourceforge.net/

Valeu? até… :thumbup:

Criado 9 de maio de 2005
Ultima resposta 4 de jun. de 2005
Respostas 7
Participantes 3