Não me abandona agora não please !!
Já ta terminando !!!!!!

2009/7/3 Leonardo Barbosa <leo...@gmail.com>

>
> ERROR:  column "NEW.Jogador1" does not exist
>
> A Questão das aspas não foi pq eu quis, o PGAdmin não aceitava colunas sem
> aspas.
> Esse NEW.Jogador1 representa o valor que ta sendo inserido ?? Coloquei
> aspas duplas e ele ficou achando que eu me referia a colunas.
>
>
> 2009/7/3 Osvaldo Kussama <osvaldo.kuss...@gmail.com>
>
>> 2009/7/3 Leonardo Barbosa <leo...@gmail.com>:
>> > Galera, estamos quase la....
>> >
>> > ERROR:  record "new" has no field "jogador1"
>> > CONTEXT:  PL/pgSQL function "verifica_6_partidas" line 4 at SQL
>> statement
>> > SQL function "sp_ins_partida" statement 1
>> >
>> > 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;
>> >   RETURN "TOTAL_JOGOS_ANDAMENTO";
>> > END;
>> > $$ LANGUAGE plpgsql;
>> >
>> > É correto chamar o NEW.Jogador1 e NEW.Jogador2 ??
>> >
>> >
>> > 2009/7/3 Osvaldo Kussama <osvaldo.kuss...@gmail.com>
>> >>
>> >> 2009/7/3 Leonardo Barbosa <leo...@gmail.com>:
>> >> > Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
>> >> > existe! O que faço?
>> >> >
>> >> > 2009/7/3 Osvaldo Kussama <osvaldo.kuss...@gmail.com>
>> >> >>
>> >> >> 2009/7/3 Leonardo Barbosa <leo...@gmail.com>:
>> >> >> > 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
>> >>
>>
>>
>> Isso que dá ficar utilizando nomes de campos com aspas. Agora tem que
>> *sempre* usar aspas.
>>
>> http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
>>
>> Osvaldo
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
>
> --
> Atenciosamente,
>
> Leonardo Barbosa
>
>


-- 
Atenciosamente,

Leonardo Barbosa
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a