2009/7/3 Leonardo Barbosa <[email protected]>:
> Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
> existe! O que faço?
>
> 2009/7/3 Osvaldo Kussama <[email protected]>
>>
>> 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.
>>


Veja CREATE LANGUAGE:
http://www.postgresql.org/docs/8.3/interactive/sql-createlanguage.html

Para que ela passe a existir nos novos banco de dados crie também no template.

Osvaldo

PS. E não deixe de ver a observação do Euler
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a