2016-06-21 51 views
3

是否可以在更新语句中引用/访问/传递当前记录?如何访问更新语句中的当前记录

CREATE TABLE t1 (
    id serial PRIMARY KEY, 
    name text 
); 

CREATE TABLE t2 (
    id serial PRIMARY KEY, 
    name text, 
    foo text 
); 

CREATE FUNCTION gen_t2_foo(_a t1, _b t2) RETURNS text AS $$ 
    SELECT _a.name || ' - ' || _b.name; 
$$ LANGUAGE sql; 

CREATE FUNCTION upd_t2(_min_id int, _max_id int, _a t1) RETURNS VOID AS $$ 
    UPDATE t2 SET 
    foo = gen_f2_name(_a, ???) -- How to pass the current t2 record? 
    WHERE id >= _min_id AND id <= _max_id; 
$$ LANGUAGE sql; 

回答

3

只是参考下表:

create function upd_t2(_min_id int, _max_id int, _a t1) 
returns void as $$ 
    update t2 
    set foo = gen_t2_foo (_a, t2) 
    where id >= _min_id and id <= _max_id; 
$$ language sql; 
+0

嗯,感谢的人! – hooblei

+0

...或使用别名'UPDATE s1.t1 r SET foo = gen_t2_foo(_a,r)...' – hooblei

1

它看起来第二功能,预计这两个表中创建一个从外地name的值,并开始和结束指数之间,对不对?在这种情况下,请确保gen_t2_foo也接收索引以合并单个记录的值(在两个表中)。然后,你可以像你想的那样使用它。

顺便说一下,为什么你声明upd_t2作为返回VOID的函数?这将是什么程序提供。