Pergunta

Apenas ter algumas dores de cabeça implementando algo em um gatilho em uma versão antiga do Sybase e se perguntou se alguém poderia ajudar. Em poucas palavras, quero escrever um gatilho que chamará outro SPROC para cada um dos registros afetados (seja inserido, excluído ou ambos [atualizados]).

Uma maneira de fazer isso no T-SQL (SQL Server) seria usar um cursor, mas nenhum dos exemplos do cursor que encontrei na web parece realmente funcionar no Sybase ASA 6.0.4-ou não gosta do T-SQL Em geral ou parece compilar, mas geralmente não faz nada (mesmo com cenários patologicamente simples e artificiais).

Essencialmente, eu quero fazer um loop através de todos os registros de tabela 'inseridos' (se houver) e para cada um Execu Mysproc (inserido.keyid), depois passe por todos os registros de tabela 'excluídos' (se houver) e novamente para cada um Execu mysproc (deleted.keyid).

Alguém tem um exemplo de fazer esse tipo de coisa, ou mesmo apenas usar um cursor somente leitura no ASA 6? O manual on -line parece ter um exemplo de um cursor simples, mas na prática não consegui fazer o exemplo realmente funcionar. EU poderia Uss o outro sproc para o gatilho (não é tão complicado), mas é muito complicado a ser feito como parte de uma instrução 'Select a partir da inserida ...' - é realmente algumas linhas de código por si só. Daí eu pensando que preciso de um cursor de qualquer maneira.

EDITAR: (29/12/09) - Acabei desenrolando o código SPROC, em desespero, mas eu realmente gostaria de ter um exemplo de cursor em Sybase Asa 6 porque, mais cedo ou mais tarde, vou enfrentar algo que não posso facilmente desenrolar. Então eu vou jogar isso para recompensa - pode alguém Dê -me um exemplo de trabalho? :-)

Foi útil?

Solução

Parece que você está procurando um gatilho de nível de linha.

Por padrão, os gatilhos no ASA são o nível de declaração (o gatilho é executado uma vez após a conclusão de toda a instrução de acionamento). Os gatilhos do nível da linha, por outro lado, executam uma vez para cada linha que é alterada.

Aqui está um exemplo de gatilho de nível de linha:

CREATE TRIGGER tr_log
AFTER UPDATE OF "myfield"
ON mytable
REFERENCING OLD AS old_data NEW AS new_data

FOR EACH ROW

BEGIN
    Insert into Narc_USER_INFO_Change (Field_Changed, New_Value, Original_Value, user)
    Values('myfield', new_data.myfield,  old_data.myfield, CURRENT USER);
END
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top