loop para procurar linhas com numeros repetidos
tenho uma bloco tabular com 4 itens da mesma tabela, quero varrer esse bloco e verificar se o numero 1 foi digitado, se não, dar uma msg ao usuario de que o codigo não foi informado e sair do loop.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Se o bloco é BASE TABLE, basta executar o comando POST e fazer uma query mesmo.
O "post" envia todos dados que estão nos blocos para o banco de dados, mas sem fazer COMMIT. Dessa forma é possível fazer query normalmente.
Caso o bloco não seja base-table, então vai ter que fazer um LOOP mesmo.
Algo assim:
(Eu não testei isso, to sem oracle aqui ... mas é por ai). Lembrando que isso ai não testa se tem números repetidos, conforme o título do post. Ele apenas testa se um numero existe no bloco, conforme o que foi explicado na mensagem)
O "post" envia todos dados que estão nos blocos para o banco de dados, mas sem fazer COMMIT. Dessa forma é possível fazer query normalmente.
Caso o bloco não seja base-table, então vai ter que fazer um LOOP mesmo.
Algo assim:
DECLARE
v_encontrou BOOLEAN := FALSE;
BEGIN
GO_BLOCK('seubloco');
FIRST_RECORD;
LOOP
IF :seubloco.seucampo = 'algoQueVoceQuerTestar'
THEN
v_encontrou := TRUE;
EXIT;
END IF;
IF :SYSTEM.LAST_RECORD = 'TRUE'
THEN EXIT;
ELSE NEXT_RECORD;
END IF;
END LOOP;
--se não encontrou, coloca o codigo que você quer aqui.
IF not V_ENCONTROU
THEN
--ERROR MESSAGE
-- ETC
NULL;
RETURN;
END IF;
--se encontrou, coloca o codigo aqui do sucesso.
COMMIT;
END;
é o titulo esta errado mesmo hahaa
posso fazer esse codigo em um botão WHEN-BUTTON-PRESSED também né ?
posso fazer esse codigo em um botão WHEN-BUTTON-PRESSED também né ?
Valeu !!
fiz umas modificações e aplicou perfeitamente, mas o caminho é esse...
tenho mais uma duvida.
Usando a mesma condição abaixo mas ... quando eu encontrar um código repetido, ao invés de eu retornar a variável boolean FALSE eu mostre somente uma vez esse código.
ex:
cod
1
2
1
3
----
resultado
1
2
3
pensei em algo tipo
Teria que tipo mostrar dentro do msg todos os campos que não repetem mais de 1 vez, se repetir mais de 1 vez mostrar somente a primeira ocorrência, descartando a segunda.
fiz umas modificações e aplicou perfeitamente, mas o caminho é esse...
tenho mais uma duvida.
Usando a mesma condição abaixo mas ... quando eu encontrar um código repetido, ao invés de eu retornar a variável boolean FALSE eu mostre somente uma vez esse código.
ex:
cod
1
2
1
3
----
resultado
1
2
3
pensei em algo tipo
DECLARE
v_encontrou BOOLEAN := FALSE;
v_id number := :seubloco.seucampo;
BEGIN
GO_BLOCK('seubloco');
FIRST_RECORD;
LOOP
IF :seubloco.seucampo <> v_id THEN
v_encontrou := FALSE;
EXIT;
END IF;
IF :SYSTEM.LAST_RECORD = 'TRUE'
THEN EXIT;
ELSE NEXT_RECORD;
END IF;
END LOOP;
--se não encontrou, coloca o codigo que você quer aqui.
IF not V_ENCONTROU THEN
mas(v_id);
END IF;
--se encontrou, coloca o codigo aqui do sucesso.
COMMIT;
END;
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
select distinct(campo) from tabela
não sei se usando a estrutura acima daria para fazer com comandos DML. Nesse meu caso não vou dar commit no final, quando esse loop varrer o bloco teria que mostrar todos os registros sem duplicidade, mesmo havendo não devo mostrar.
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 213
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Bom, se a situação é de um bloco não base-table, então você terá que usar dois loop's, um percorrendo o bloco e outro percorrendo o array onde estarão os valores que você irá mostrar, ai depois é só usar a lógica, se já existir no array você não adiciona, caso não exista, adiciona.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Se for muitas linhas, talvez vale a pena inserir esses valores numa tabela temporária.
(ou seja, percorrer o bloco e ir inserindo, já que ele é não base-table).
Dai fica fácil de achar duplicados.
(ou seja, percorrer o bloco e ir inserindo, já que ele é não base-table).
Dai fica fácil de achar duplicados.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes