Se eu tiver uma função no PostgreSQL, posso validar seus argumentos (por exemplo, um username
argumento) assim:
IF LENGTH(username) < 4 THEN
RAISE EXCEPTION 'Usernames must contain at least four characters';
END IF;
O que não consigo descobrir é como fazer a mesma coisa com os resultados de uma consulta SELECT, ou seja. algo como:
IF LENGTH(SELECT * FROM USERS WHERE username=username) > 1 THEN
RAISE EXCEPTION 'Username already exists';
END IF;
(E sim, eu sei que o PostgreSQL me dará um erro sem essa linha, mas quero ter uma mensagem de erro mais amigável.)
É possível algo assim no (Postgre)SQL e, se sim, alguém pode me indicar a sintaxe (ou um exemplo dela) que eu possa ver?
Sim, isso é possível, mas a subconsulta precisa de um par extra de parênteses:
Um par de parênteses é para a subconsulta, um para a chamada de função.
A maneira mais legível de escrever isso é