|
View:
New views
13 Messages
—
Rating Filter:
Alert me
|
|
|
Dúvida Sinataxe TriggerSalve 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 Trigger2009/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 TriggerOsvaldo, 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@...>: -- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
|
|
Re: Dúvida Sinataxe TriggerOsvaldo 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; ^^^^^^^^^^^^^ > 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 TriggerEuller, ta dando a falta do plpgsql aqui... nao tenho essa linguagem!
2009/7/3 Euler Taveira de Oliveira <euler@...> Osvaldo Kussama escreveu: -- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
|
|
Re: Dúvida Sinataxe Trigger2009/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 TriggerGalera, 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@...>
-- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
|
|
Re: Dúvida Sinataxe Trigger2009/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 TriggerERROR: 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@...>
-- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
|
|
Re: Dúvida Sinataxe TriggerLeonardo 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 TriggerNão me abandona agora não please !!
Já ta terminando !!!!!! 2009/7/3 Leonardo Barbosa <leogbt@...>
-- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
|
|
Re: Dúvida Sinataxe Trigger2009/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 TriggerObrigado amigo!!!
Consegui agora... Valeu mesmo !!! 2009/7/3 Osvaldo Kussama <osvaldo.kussama@...>
-- Atenciosamente, Leonardo Barbosa _______________________________________________ pgbr-geral mailing list pgbr-geral@... https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral |
| Free embeddable forum powered by Nabble | Forum Help |