Dúvida Sinataxe Trigger

View: New views
13 Messages — Rating Filter:   Alert me  

Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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 ?

--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Osvaldo Kussama :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/7/3 Leonardo Barbosa <leogbt@...>:

> 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
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Osvaldo, foi retornado um erro informando que a linguagem plpgsql não existe! O que faço?

2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
2009/7/3 Leonardo Barbosa <leogbt@...>:
> 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
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Euler Taveira de Oliveira-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Osvaldo Kussama escreveu:

> 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 NEW;
   ^^^^^^^^^^^^^
> END;
> $$ LANGUAGE plpgsql;
>


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Euller, ta dando a falta do plpgsql aqui... nao tenho essa linguagem!

2009/7/3 Euler Taveira de Oliveira <euler@...>
Osvaldo Kussama escreveu:
> 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 NEW;
  ^^^^^^^^^^^^^
> END;
> $$ LANGUAGE plpgsql;
>


--
 Euler Taveira de Oliveira
 http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Osvaldo Kussama :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/7/3 Leonardo Barbosa <leogbt@...>:

> Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
> existe! O que faço?
>
> 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
>>
>> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> > 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
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.kussama@...>
2009/7/3 Leonardo Barbosa <leogbt@...>:
> Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
> existe! O que faço?
>
> 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
>>
>> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> > 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
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Osvaldo Kussama :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/7/3 Leonardo Barbosa <leogbt@...>:

> 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.kussama@...>
>>
>> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> > Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
>> > existe! O que faço?
>> >
>> > 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
>> >>
>> >> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> >> > 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@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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.kussama@...>
2009/7/3 Leonardo Barbosa <leogbt@...>:
> 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.kussama@...>
>>
>> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> > Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
>> > existe! O que faço?
>> >
>> > 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
>> >>
>> >> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> >> > 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@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Euler Taveira de Oliveira-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Leonardo Barbosa escreveu:
> ERROR:  column "NEW.Jogador1" does not exist
>
NEW."Jogador1"


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

2009/7/3 Leonardo Barbosa <leogbt@...>

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.kussama@...>
2009/7/3 Leonardo Barbosa <leogbt@...>:
> 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.kussama@...>
>>
>> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> > Osvaldo, foi retornado um erro informando que a linguagem plpgsql não
>> > existe! O que faço?
>> >
>> > 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
>> >>
>> >> 2009/7/3 Leonardo Barbosa <leogbt@...>:
>> >> > 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@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
Atenciosamente,

Leonardo Barbosa




--
Atenciosamente,

Leonardo Barbosa


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

Re: Dúvida Sinataxe Trigger

by Osvaldo Kussama :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/7/3 Leonardo Barbosa <leogbt@...>:
>
> 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.
>


Tente: NEW."Jogador1"
Coloque entre aspas apenas o nome do campo.

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

Re: Dúvida Sinataxe Trigger

by Leonardo Barbosa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Obrigado amigo!!!
Consegui agora... Valeu mesmo !!!

2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
2009/7/3 Leonardo Barbosa <leogbt@...>:
>
> 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.
>


Tente: NEW."Jogador1"
Coloque entre aspas apenas o nome do campo.

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



--
Atenciosamente,

Leonardo Barbosa


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