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 _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
