2009/7/3 Leonardo Barbosa <[email protected]>:
> Salve galera!
>
> Tou com a necessidade de criar uma trigger para verificar de a quantidade de
> jogos numa tabela é menor ou igual a 6. Se for maior que 6, o insert não
> deve ser efetuado.
>
> Estou tentando criar a seguinte trigger para realizar essa tarefa:
>
> CREATE FUNCTION verifica_6_partidas() RETURNS trigger AS $$
> BEGIN
>   SELECT COUNT(*) AS TOTAL_JOGOS_ANDAMENTO FROM "Partida" WHERE "Fim" IS
> NULL AND ("Jogador1" = NEW.Jogador1 OR "Jogador2" = NEW.Jogador2)
>   IF ("TOTAL_JOGOS_ANDAMENTO" = 6) THEN
>      RAISE EXCEPTION 'O jogador possui 6 partidas em andamento. Não foi
> possível prosseguir esta operação!';
>   END IF;
> END;
> $$ LANGUAGE internal
>
> CREATE TRIGGER "trigger_verifica_6_partidas" BEFORE INSERT
> ON "public"."Partida" FOR EACH STATEMENT
> EXECUTE PROCEDURE "verifica_6_partidas"();
>
> A mensagem de erro que é retornada é a seguinte:
> ERROR:  there is no built-in function named "
>   SELECT COUNT(*) AS TOTAL_JOGOS_ANDAMENTO FROM "Partida" WHERE "Fim" IS
> NULL AND ("Jogador1" = NEW.Jogador1 OR "Jogador2" = NEW.Jogador2)
>   IF ("TOTAL_JOGOS_ANDAMENTO" = 6) THEN
>      RAISE EXCEPTION 'O jogador possui 6 partidas em andamento. Não foi
> possível prosseguir esta operação!';
>
> Alguem ai sabe o que pode estar acontecendo? Onde estou errando ?
>


Tente:

CREATE FUNCTION verifica_6_partidas() RETURNS trigger AS $$
DECLARE
  TOTAL_JOGOS_ANDAMENTO int;
BEGIN
  SELECT COUNT(*) INTO TOTAL_JOGOS_ANDAMENTO FROM "Partida" WHERE
"Fim" IS NULL AND ("Jogador1" = NEW.Jogador1 OR "Jogador2" =
NEW.Jogador2);
  IF ("TOTAL_JOGOS_ANDAMENTO" = 6) THEN
     RAISE EXCEPTION 'O jogador possui 6 partidas em andamento. Não
foi possível prosseguir esta operação!';
  END IF;
END;
$$ LANGUAGE plpgsql;

Repare no SELECT...INTO...
http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
e no ; ao final.
A variável TOTAL_JOGOS_ANDAMENTO precisa ser declarada, ela tem que
ser uma variável e não é um alias.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a