No último Oracle APEX Tour 2024 em Brasília, uma pergunta surgiu durante o painel de palestrantes: “É possível validar se o registro de uma “collection” sofreu alguma alteração na base de dados durante a sua manipulação ?”. A pergunta foi feita a meu colega André Souza, que fez uma apresentação sobre as vantagens e a melhoria de performance com o uso de coleções no APEX. Embora ele não tivesse enfrentado essa necessidade antes, mencionei durante o painel a utilização da pseudo-coluna ORA_ROWSCN como solução.
Neste artigo apresento um guia prático para implementar essa ideia.
Primeiro, é necessário criar a tabela com a opção ROWDEPENDENCIES, que permite rastrear o SCN (System Change Number) no nível da linha:
CREATE TABLE Beg_Teste_Orarowscn (
"ID" NUMBER(*, 0) PRIMARY KEY,
"DESCRICAO" VARCHAR2(150 BYTE) NOT NULL ENABLE
)
ROWDEPENDENCIES;
Por padrão, o Oracle rastreia o SCN no nível de bloco do banco de dados. Com ROWDEPENDENCIES, o SCN será armazenado por linha, permitindo maior granularidade.
Adicione os registros para realizar os testes:
INSERT INTO Beg_Teste_Orarowscn VALUES (1, 'TESTE 1'); INSERT INTO Beg_Teste_Orarowscn VALUES (2, 'TESTE 2'); INSERT INTO Beg_Teste_Orarowscn VALUES (3, 'TESTE 3'); INSERT INTO Beg_Teste_Orarowscn VALUES (4, 'TESTE 4'); INSERT INTO Beg_Teste_Orarowscn VALUES (5, 'TESTE 5'); INSERT INTO Beg_Teste_Orarowscn VALUES (6, 'TESTE 6'); INSERT INTO Beg_Teste_Orarowscn VALUES (7, 'TESTE 7'); INSERT INTO Beg_Teste_Orarowscn VALUES (8, 'TESTE 8'); INSERT INTO Beg_Teste_Orarowscn VALUES (9, 'TESTE 9'); INSERT INTO Beg_Teste_Orarowscn VALUES (10, 'TESTE 10'); COMMIT;

Utilize a pseudo-coluna ORA_ROWSCN para visualizar o SCN associado a cada linha:
SELECT
A.Id,
A.Descricao,
A.Ora_Rowscn
FROM
Beg_Teste_Orarowscn A
ORDER BY
Id;
Realize uma atualização em um registro específico e confirme a transação:
UPDATE Beg_Teste_Orarowscn SET Descricao = Descricao || ' REGISTRO ALTERADO' WHERE Id = 4; COMMIT;

Após a atualização, execute novamente a consulta e observe o SCN modificado apenas no registro alterado:
SELECT
A.Id,
A.Descricao,
A.Ora_Rowscn
FROM
Beg_Teste_Orarowscn A
ORDER BY
Id;
Dessa forma, ao carregar a coluna ORA_ROWSCN na collection em memória, será possível compará-la com o valor correspondente no banco de dados. Isso permitirá identificar se houve alguma modificação no registro durante o período de manipulação.
A decisão de usar ou não ROWDEPENDENCIES depende das necessidades do seu negócio. Valide em sua aplicação para verificar o impacto real no desempenho e no armazenamento. Lembre-se: o Oracle Database tem a solução, basta escolher a ideal para o seu caso.

Oracle Cloud oferece uma infraestrutura robusta, segura e escalável, permitindo que sua empresa melhore a eficiência operacional, reduza custos com TI e tenha acesso a uma plataforma de desenvolvimento de alta performance. Além disso, a Oracle Cloud suporta a inovação contínua com ferramentas integradas de IA e machine learning.
A Beg Support oferece um serviço completo de migração para a Oracle Cloud, que inclui avaliação inicial, planejamento detalhado, execução da migração e suporte pós-migração. Nosso time de especialistas garante que a transição seja suave e que sua operação continue sem interrupções.
Oferecemos suporte completo para bancos de dados, incluindo monitoramento proativo, otimização de desempenho, gerenciamento de backups e recuperação, atualizações e patching, e suporte técnico 24/7. Nosso objetivo é garantir que seus bancos de dados funcionem de maneira eficiente e segura.
A Beg Support fornece ferramentas e dashboards personalizados para monitoramento contínuo das suas instâncias na Oracle Cloud. Isso inclui métricas de desempenho em tempo real, alertas de uso de recursos, análises de tendências e relatórios detalhados. Assim, você pode identificar e resolver problemas antes que eles afetem sua operação.