我需要创建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方法参数?
答案 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)
将引用列而不是整个表(=行),因此它没有不行。