Atualmente estou experimentando um pouco com PL/pgSQL e quero saber se existe uma maneira mais elegante de fazer algo assim:
select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
Os blocos de exceção destinam-se a interceptar erros, não a verificar condições. Em outras palavras, se alguma condição puder ser tratada em tempo de compilação, ela não deve ser capturada como erro, mas resolvida pela lógica comum do programa.
Na seção Trapping Errors da documentação do PL/PgSQL você pode encontrar essa dica:
Em vez de usar exceções (ruins) ou IF/THEN/ELSIF (melhor), você pode reescrever isso em uma consulta:
Se você realmente deseja duas consultas, pode usar a variável especial FOUND para testar se a consulta anterior deu algum resultado:
Seguem links obrigatórios de RTFM :-)
Veja isto para descrição da
FOUND
variável, e isto paraIF
/THEN
blocos.Você pode examinar uma variável especial FOUND de um tipo boolean. Da documentação: