ENCONTRAR [Ô]BURACO[Ô] NO AUTO-CONTADOR
Bom dia,
Estou precisando encontrar em uma tabela quais registros estão faltando, exemplo:
Tabela Movimento
ID Cliente Endereco
1 Marcio Rua X
2 Eduardo Rua Y
4 Maria Rua Z
5 Ana Rua A
Como faço para descobrir que o registro 3 não existe na tabela?
Queria resolver isso por SQL.
Estou precisando encontrar em uma tabela quais registros estão faltando, exemplo:
Tabela Movimento
ID Cliente Endereco
1 Marcio Rua X
2 Eduardo Rua Y
4 Maria Rua Z
5 Ana Rua A
Como faço para descobrir que o registro 3 não existe na tabela?
Queria resolver isso por SQL.
Olha, não acho a idéia interessante, isso pode te causar alguns transtornos se caso ocorra algum erro e os registros da tabela filha não forem excluido,
esquece isso!
esquece isso!
Mas eu não vou fazer nada, eu só quero saber quais registros estão faltando...
Eles já não existem na tabela, é que eu não queria ter que fazer um select full na tabela e colocar em um loop pra descrobrir os buracos...
Hoje o sistema que trablho gera log txt de tudo que faz no BD, aà eu preciso efetuar uma pesquisa e tentar descobrir o porque está faltando algum registro.
Essa consulta vai ser apenas uma ferramenta para descobrir oque está acontecendo
Eles já não existem na tabela, é que eu não queria ter que fazer um select full na tabela e colocar em um loop pra descrobrir os buracos...
Hoje o sistema que trablho gera log txt de tudo que faz no BD, aà eu preciso efetuar uma pesquisa e tentar descobrir o porque está faltando algum registro.
Essa consulta vai ser apenas uma ferramenta para descobrir oque está acontecendo
Talvez:
Select
ID
From
Movimento As A
Where
Not Exists (Select 1 From Movimento As B Where B.ID = (A.ID -1))
Cara....via SQL creio q n seja possÃvel n
O q se pode fazer é um POG (Programação Orientada a Gambiarra)
DIm Tabela as RecordSet
Set Tabela = Banco.OpenRecordset ([Ô]Select Max(id) AS MaxCod From SuaTabela[Ô])
For X = 1 to Tabela!MaxCod
Set Tabela = Banco.OpenRecordset ([Ô]Select ID From SuaTabela Where ID = [Ô] & X & [Ô] [Ô])
If Tabela.EOF = TRUE then List1.Additem X
Next X
Então ... via programação dá pra fazer... é que eu queria criar somente um script... e passar para os analistas
a consulta que o ASHKATCHUP passou é quase isso, é que ela retornar sempre o primeiro registro após o buraco, já ajuda...
tava procurando na internet e no postgre tem um comando genarete_series e seria justamente esse comando que eu queria só que no Oracle
a consulta que o ASHKATCHUP passou é quase isso, é que ela retornar sempre o primeiro registro após o buraco, já ajuda...
tava procurando na internet e no postgre tem um comando genarete_series e seria justamente esse comando que eu queria só que no Oracle
MARCIO_TEIXEIRA, boa atrde.
Uma ideia baca, seria você criar uma tabela temporaria contendo somente o ID da tabela principal com [Ô]todos os registos[Ô] do 1º ao útimo, mais ou menos assim:
-> 1, 2, 3, 4, 5, 6,..., Último.
Depois você faz um consulta selecção de comparação entre a tabela Real e a tabela temporaria. Está é a única alternativa que vejo para você via sql, ok???
Uma ideia baca, seria você criar uma tabela temporaria contendo somente o ID da tabela principal com [Ô]todos os registos[Ô] do 1º ao útimo, mais ou menos assim:
-> 1, 2, 3, 4, 5, 6,..., Último.
Depois você faz um consulta selecção de comparação entre a tabela Real e a tabela temporaria. Está é a única alternativa que vejo para você via sql, ok???
Achei o que eu queria, segue a solução
select *
from (with data as (SELECT rownum result
FROM Dual
CONNECT BY level <= 684842)
select result
from (select rownum my_row, result from data order by result)
where my_row between 684816 and 684842) a
where not exists
(Select 1 From movimento B Where B.codigo = (A.result))
select *
from (with data as (SELECT rownum result
FROM Dual
CONNECT BY level <= 684842)
select result
from (select rownum my_row, result from data order by result)
where my_row between 684816 and 684842) a
where not exists
(Select 1 From movimento B Where B.codigo = (A.result))
Tópico encerrado , respostas não são mais permitidas