2017-04-10 84 views
0

我在写一个函数来添加父记录和子记录。PostgreSQL:添加父&子记录的函数

据我所知,我应该创建适当的数据类型,我已经简化了。

create type parenttype as (
    data varchar   -- data 
); 

create type childtype as (
    parent integer,   -- foreign key 
    details varchar   -- data 
); 

这是一个简化版本,省略了几个字段,这些字段对问题没有任何意义。但是,他们也都省略了将生成的主键。

我觉得功能将采取以下形式:

function adddata(parentdata parenttype, childdata childtype[]) 
-- etc 
-- LANGUAGE plpgsql 

认为我知道该怎么做什么用里面的数据做一旦到达那里。

问题是,如何在调用函数之前设置数据?也就是说,如何为parenttypechildtype设置数值?

我询问过有关MS SQL Server的问题,但我知道这需要不同的方法。

回答

0

取决于您所说的功能以及此数据来自何处。

实施例1

SELECT * FROM adddata(
     row('somedata')::parenttype, 
     array[row(1::integer,'somedata'), row(2::integer,'somedata22')]::childtype[] 
); 

实施例2

SELECT adddata(
     row(parent.column)::parenttype, 
     array_agg(row(child.parent_id,child.column)::childtype) 
     ) 
FROM parent 
JOIN child ON child.parent_id = parent.id 
GROUP BY parent.column; 
+0

你能澄清'array_agg'?我可以添加2行吗?另外,在第二个例子中,是否真的需要'SELECT'子句之后的附加子句? – Manngo

+0

'array_agg'将返回您传递给它的元素数组作为参数。在这种情况下,它将是childtype类型的行数组。附加条款是什么意思?第二个例子是从表中的数据构建函数的参数。 –