Erro ao tentar criar uma FUNCTION Postgresql [RESOLVIDO]

6 respostas
S

ola, meu problema é esse, quando tento criar a function da erro minha function é essa:

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  está nessa compra !';
		
	end if;

	INSERT INTO Compra VALUES (_IdProduto,_idCliente,_dataCompra,_valor,_qnt);

		END;
		$$
		LANGUAGE 'plpgsql' VOLATILE

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

6 Respostas

T

já tentou usar o for?

S

com for nao tentei ainda, queira fazer com while, mas eu tentei e deu erro

S

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

G

faltou “;” na linha 12 e acho que esse while é infinito

G
Cara fiz isso ve se funciona, to no trampo e nao tem como testar
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  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'
S

Valeu gordogranudo, serviu sim era isso que eu tentava fazer …VALEWSS !!

Criado 21 de junho de 2013
Ultima resposta 21 de jun. de 2013
Respostas 6
Participantes 3