Olá.
Estou com uma grande dúvida.
Criei uma tabela para cadastramento de veículos. Nela existe um campo para ano_fabricação e outro para ano_modelo do veículo. Lembrando que usei a máscara YYYY para os campos. Fiz um when-validate-item para q se o usuário digitasse o ano_modelo menor q o ano_fabricação retornasse um erro. Até aí tudo bem, o problema é q tb quero q se o ano_modelo for dois anos a mais q o ano_fabricação ele me retorne um erro tb. Tipo, se o ano_fabricação for 2005 o ano_modelo tem q ser 2006, não mais q isso.
Até agora fiz isso:
DECLARE
ANO_FABRICACAO NUMBER;
ANO_MODELO NUMBER;
BEGIN
ANO_FABRICACAO := (':FRT_VEICULOS.ANO_FABRICACAO');
ANO_MODELO := (':FRT_VEICULOS.ANO_MODELO');
IF ANO_MODELO < ANO_FABRICACAO AND
ANO_MODELO > (ANO_FABRICACAO + 2) <-- "AQUI O ERRO"
THEN
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
RAISE FORM_TRIGGER_FAILURE;
END IF;
END;
Se alguém entendeu o q eu quis dizer e souber como resolver agradeço se me ajudar, vlw!
Soma de anos
-
- Rank: Programador Júnior
- Mensagens: 21
- Registrado em: Qua, 10 Mar 2010 10:20 am
- Localização: IGREJINHA
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Hmm.. não entendi muito bem o seu problema..
Está dando algum erro na comparação?
Nestas linhas, você está usando aspas entre o nome dos campos mesmo?
Os campos :FRT_VEICULOS.ANO_FABRICACAO e :FRT_VEICULOS.ANO_MODELO são do tipo number? ou date? se forem date, seria necessário convertê-los
No if.. pelo que você descreveu, você precisa apresentar o erro se o ano do modelo for inferior ao ano de fabricação, ou se o ano do modelo for dois anos mais velho que o ano de fabricação (no seu if está com and.. acredito que seja um or).
Está dando algum erro na comparação?
Nestas linhas, você está usando aspas entre o nome dos campos mesmo?
ANO_FABRICACAO := (':FRT_VEICULOS.ANO_FABRICACAO');
ANO_MODELO := (':FRT_VEICULOS.ANO_MODELO');
ANO_FABRICACAO := to_number(to_char(:FRT_VEICULOS.ANO_FABRICACAO, 'yyyy')));
ANO_MODELO := to_number(to_Char((:FRT_VEICULOS.ANO_MODELO, 'yyyy')));
if ( ( ano_modelo < ano_fabricacao ) or ( ( ano_modelo - ano_fabricacao ) > 2 ) ) then
-
- Rank: Programador Júnior
- Mensagens: 21
- Registrado em: Qua, 10 Mar 2010 10:20 am
- Localização: IGREJINHA
E aê Rogenaro.
Primeiramente t agradeço pela ajuda.
Seguinte, na parte em q passo os valores para as variáveis (q estão como NUMBER) eu realmente uso aspas. Tentei fazer sem as aspas mas dava erro, e desta forma ele passa tranquilo.
Mas olha só, resolví fazer de uma forma diferente, sem precisar atribuir variáveis, partindo direto de um IF, olha só:
Como eu queria ele não permite q se coloque o ano_modelo inferior ao ano_fabricação, só que agora ele tb não permite q o ano_modelo seja 1 ano maior q o de fabricação. Tipo se o ano_fabricação é 2005 ele não permite q o ano_modelo seja 2006. Resumindo ele só passa se o ano_modelo for o mesmo ano_fabricação.
Primeiramente t agradeço pela ajuda.
Seguinte, na parte em q passo os valores para as variáveis (q estão como NUMBER) eu realmente uso aspas. Tentei fazer sem as aspas mas dava erro, e desta forma ele passa tranquilo.
Mas olha só, resolví fazer de uma forma diferente, sem precisar atribuir variáveis, partindo direto de um IF, olha só:
IF ((:FRT_VEICULOS.ANO_MODELO < :FRT_VEICULOS.ANO_FABRICACAO)
OR
((:FRT_VEICULOS.ANO_MODELO - :FRT_VEICULOS.ANO_FABRICACAO) > 2 ))
THEN
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
RAISE FORM_TRIGGER_FAILURE;
END IF;
-
- Rank: Programador Júnior
- Mensagens: 21
- Registrado em: Qua, 10 Mar 2010 10:20 am
- Localização: IGREJINHA
Conseguí!
O problema é q os testes q eu fazia não batiam com os tipos criados para cada variável.
Agradeço ao Rogenaro pela ajuda.
Bom, fica aqui então a query para quem quiser usar.
Abraço a todos!
O problema é q os testes q eu fazia não batiam com os tipos criados para cada variável.
Agradeço ao Rogenaro pela ajuda.
Bom, fica aqui então a query para quem quiser usar.
DECLARE
ANO_MODELO NUMBER;
ANO_FABRICACAO NUMBER;
BEGIN
ANO_MODELO := TO_NUMBER(TO_CHAR(:FRT_VEICULOS.ANO_MODELO,'YYYY'));
ANO_FABRICACAO := TO_NUMBER(TO_CHAR(:FRT_VEICULOS.ANO_FABRICACAO,'YYYY'));
IF ((ANO_MODELO < ANO_FABRICACAO) OR
((ANO_MODELO - ANO_FABRICACAO) > 1 ))
THEN
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
MESSAGE('DIGITE ANO MODELO NOVAMENTE');
RAISE FORM_TRIGGER_FAILURE;
END IF;
END;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes