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