2017-04-17 82 views
0

我试图创建一个函数,允许我在数据库中执行多个查询。这是我第一次尝试使用命令行来实现这一目标。我正在使用PostgreSQL在Linux系统(UNBUNTU)中工作。从命令行创建PostgreSQL函数

我PGSQL:

create function my_function(idteste integer, nome character varying, tipo integer, morada character varying, cpostal character varying, telefone character varying, nif character varying, nacionalidade character varying, iban character varying, moradaimag character varying, cc1 character varying, ccimage1 character varying, ccimage2 character varying, datanascimento date) 
returns character varying as $tempvar$ 
declare tempvar character varying; 
begin 
tempvar := 'null'; 
if (select count(id_teste) from singulares where id_idteste=idteste) = 0 then 
update pessoas set 
nome_pessoal=nome, 
tipo_pesoal = tipo,  
morada_pessoal=morada, 
cpostal_pessoal=cpostal, 
telefone_pessoal=telefone, 
nif_pessoal=nif, 
nacionalidade_pessoal=nacionalidade, 
iban_pessoal=iban, 
cmorada_img=cmoradaimag 
where 
id_teste=idteste; 
insert into singulares (pessoas_idteste, cc, cc_img1, cc_img2, data_nascimento) values(idteste, cc1, ccimage1, ccimage2, datanascimento); 
tempvar := 'gravado com sucesso'; 
else 
update pessoas set 
nome_pessoal=nome, 
tipo_pesoal = tipo,  
morada_pessoal=morada, 
cpostal_pessoal=cpostal, 
telefone_pessoal=telefone, 
nif_pessoal=nif, 
nacionalidade_pessoal=nacionalidade, 
iban_pessoal=iban, 
cmorada_img=cmoradaimag 
where 
id_teste=idteste; 
update singulares set 
cc=cc1, 
cc_img1=ccimage1, 
cc_img2=ccimage2 
where 
pessoas_idteste=idteste; 
tempvar := 'alterado com sucesso'; 
end if; 
return tempvar; 
end 
$tempvar$ language plpgsql; 

我的第一个问题是如何创建通过命令行功能?

创建函数时出现的第二个问题是否可以从PGmyadmin中看到?

您的帮助将受到欢迎!

预先感谢您。

回答

2

假设你的函数存储在一个脚本文件create_my_function.sql和你在用户testuser所拥有的数据库testdb来创建它,下面是创建的一种方式:

psql -h localhost -U testuser -d testdb -f create_my_function.sql 

不知道我理解你的第二个问题,但是一旦创建了该函数,它应该在任何可用的数据库管理工具中都可见。

+0

感谢您的帮助。您的方式有效,但如果我们将该功能直接复制到命令行,它的工作方式与我想要的一样。 –