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 <[email protected]>

> 2009/7/3 Leonardo Barbosa <[email protected]>:
> > 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 <[email protected]>
> >>
> >> 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
> >>
>
>
> 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
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Atenciosamente,

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

Responder a