Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thomas Couto

Qual é o erro nessa function ?

Recommended Posts

CREATE OR REPLACE FUNCTION addUsuario(empr VARCHAR(45), nome VARCHAR(45), cpf VARCHAR(14), ender VARCHAR(200), tipo VARCHAR(9)) RETURNS VARCHAR AS $$	BEGIN		declare id_empresa int;		SELECT id_empresa = em.id FROM empresa em WHERE em.nome = empr;			INSERT INTO usuario (empresa, nome, tipo, cpf, endereco) VALUES (empr, nome, tipo, cpf, ender);		RETURN null;		END;$$ LANGUAGE plpgsql;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim funcionou ...

 

CREATE OR REPLACE FUNCTION addUsuario(empr VARCHAR(45), nome VARCHAR(45), cpf VARCHAR(14), ender VARCHAR(200), tipo VARCHAR(9))
RETURNS VARCHAR AS $$
declare
id_empresa integer;

BEGIN
		SELECT id_empresa = em.id FROM empresa em WHERE em.nome = empr;

		INSERT INTO usuario (empresa, nome, tipo, cpf, endereco) VALUES (empr, nome, tipo, cpf, ender);
		RETURN null;
END;
$$ LANGUAGE plpgsql;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thomas,

 

Observe que o 'dataset' está certo. A diretiva DECLARE deve ficar fora do BEGIN ... END.

Outro problema é a nomeação dos parametros. Observe que você passou os parametros nome, tipo e cpf com os mesmos nomes dos campos,

confundindo o PostgreSQL.

 

Veja:

 

CREATE OR REPLACE FUNCTION addUsuario4(empr VARCHAR(45), nome VARCHAR(45), cpf VARCHAR(14), ender VARCHAR(200), tipo VARCHAR(9))

RETURNS VARCHAR AS $$

declare id_empresa int;

BEGIN

SELECT id_empresa = em.id FROM empresa em WHERE em.nome = empr;

INSERT INTO usuario VALUES (empr, nome,cpf, ender, tipo);

RETURN null;

END;

$$ LANGUAGE plpgsql;

 

Funciona por que omiti os nomes dos campos, mas a ordem original dos campos deve ser observada.

 

 

CREATE OR REPLACE FUNCTION addUsuario4(par_empr VARCHAR(45), par_nome VARCHAR(45), par_cpf VARCHAR(14), par_ender VARCHAR(200), par_tipo VARCHAR(9))

RETURNS VARCHAR AS $$

declare id_empresa int;

 

BEGIN

SELECT id_empresa = em.id FROM empresa em WHERE em.nome = empr;

INSERT INTO usuario (endereço, empresa, nome, tipo, cpf) VALUES (par_ender, par_empr, par_nome, par_cpf, par_tipo);

RETURN null;

END;

$$ LANGUAGE plpgsql;

 

Também funciona por que mudei os nomes dos parametros (prefixando-os com par_) e, como inverti o campo endereço na relação,

devo inverte-lo no parametro correspondente.

 

Observe que o erro apontado pelo PostgreSQL (no pgadminIII) mostra claramente a confusão campos X parametros,

colocando $1, $2, etc... na lista correspondente aos campos.

 

É isso.

 

abçs

 

:unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.