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
