Erro ao tentar criar uma FUNCTION Postgresql [RESOLVIDO]

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 :confused:

qualquer ajuda já ajuda … valews

já tentou usar o for?

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 !!