如何在plpgsql函数中获取当前行值

时间:2015-08-16 18:00:44

标签: sql postgresql plpgsql postgresql-9.1

我需要创建plpgsql方法,这些方法使用当前行值而不在update命令中传入参数。

我试过

 synchronized (stack) {
    while (stack.isEmpty()){
        try {
            stack.wait(); 
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 }  

但是异常

create temp table test ( test text, result text ) on commit drop;
insert into test values ('1','');

CREATE OR REPLACE FUNCTION public.gettest() RETURNS text AS $$
DECLARE
  comp text := NULL;

BEGIN
EXECUTE 'SELECT ''Current row is '' ||test.test' INTO comp;
RETURN comp;
END; $$ LANGUAGE plpgsql STRICT STABLE;

update test set result = 'Result: ' || gettest();

如何解决? 如何修复而不将vaue传递给plpgsql方法参数?

1 个答案:

答案 0 :(得分:1)

没有“隐含当前行”这样的东西。 可以将该函数作为参数传递给它。但是,如果您愿意,可以传递完整的行:

create temp table test (val text, result text ) on commit drop;
insert into test values ('1','');
insert into test values ('2','');

CREATE OR REPLACE FUNCTION gettest(p_test test) RETURNS text AS $$
DECLARE
  comp text := NULL;
BEGIN
   comp := 'Current row is '||p_test.val;
RETURN comp;
END; $$ LANGUAGE plpgsql STRICT STABLE;

update test set result = 'Result: ' || gettest(test);

我必须将列test重命名为其他内容,否则调用gettest(test)将引用而不是整个表(=行),因此它没有不行。