ola, meu problema é esse, quando tento criar a function da erro minha function é essa:
[code] CREATE OR REPLACE FUNCTION verifica_compra(integer ,integer, date,numeric,integer) RETURNS VOID AS $$
DECLARE
_idCliente alias for $2;
_idProduto alias for $1;
_dataCompra alias for $3;
_valor alias for $4;
_qnt alias for $5;
idProd ;
BEGIN
IF (_idProduto = (select idProduto from compra where idCliente = _idCliente and dataCompra = _dataCompra) )THEN
RAISE EXCEPTION 'O produto já está nessa compra !';
end if;
INSERT INTO Compra VALUES (_IdProduto,_idCliente,_dataCompra,_valor,_qnt);
END;
$$
LANGUAGE 'plpgsql' VOLATILE
[/code]
essa function faz com que se ocorrer um insert com o mesmo produto na compra de erro, mas so funciona com um item de, se eu coloco dois itens ele da erro, porque o select pega dois itens ou mais e como o IF so faz a comparacao com um numero ai eu nao sei o que faço 
qualquer ajuda já ajuda … valews
com for nao tentei ainda, queira fazer com while, mas eu tentei e deu erro
fiz com while assim:
CREATE OR REPLACE FUNCTION verifica_compra(integer ,integer, date,numeric,integer) RETURNS VOID AS $$
DECLARE
_idCliente alias for $2;
_idProduto alias for $1;
_dataCompra alias for $3;
_valor alias for $4;
_qnt alias for $5;
idProd INTEGER;
BEGIN
idProd := (select idProduto from compra where idCliente = _idCliente and dataCompra = _dataCompra)
WHILE (idProd <> 0) LOOP
IF (_idProduto = idProd )THEN
RAISE EXCEPTION 'O produto já está nessa compra !';
idProd:=idProd + 1;
end if;
END LOOP;
INSERT INTO Compra VALUES (_IdProduto,_idCliente,_dataCompra,_valor,_qnt);
idProd:=0;
END;
$$
LANGUAGE 'plpgsql' VOLATILE
mas retorna esse erro:
ERRO: erro de sintaxe em ou próximo a "("
LINE 15: WHILE (idProd <> 0) LOOP
^
********** Error **********
ERRO: erro de sintaxe em ou próximo a "("
SQL state: 42601
Character: 373
porque a sintaxe esta errada???
faltou “;” na linha 12 e acho que esse while é infinito
Cara fiz isso ve se funciona, to no trampo e nao tem como testar
[code]CREATE OR REPLACE FUNCTION verifica_compra(integer ,integer, date,numeric,integer) RETURNS VOID AS $$
DECLARE
_idCliente alias for $2;
_idProduto alias for $1;
_dataCompra alias for $3;
_valor alias for $4;
_qnt alias for $5;
idProd compra%rowtype;
contador integer;
BEGIN
select into _idprod * from compra;
contador := (select count(datacompra) from compra);
WHILE (contador > 0) LOOP
IF (_idProduto = _idprod.idProduto )THEN
RAISE EXCEPTION 'O produto já está nessa compra !';
idProd:=idProd + 1;
exit;
end if;
contador := contador-1;
END LOOP;
INSERT INTO Compra VALUES (_IdProduto,_idCliente,_dataCompra,_valor,_qnt);
END $$ LANGUAGE ‘plpgsql’ [/code]
Valeu gordogranudo, serviu sim era isso que eu tentava fazer …VALEWSS !!