如何在plpgsql函数中获取当前行值
我需要创建plpgsql方法,这些方法使用当前行值,而不在update命令中传入参数 我试过了如何在plpgsql函数中获取当前行值,sql,postgresql,plpgsql,postgresql-9.1,Sql,Postgresql,Plpgsql,Postgresql 9.1,我需要创建plpgsql方法,这些方法使用当前行值,而不在update命令中传入参数 我试过了 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 EX
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();
但有例外
ERROR: missing FROM-clause entry for table "test"
LINE 1: SELECT 'Current row is ' ||test.test
^
QUERY: SELECT 'Current row is ' ||test.test
CONTEXT: PL/pgSQL function gettest() line 6 at EXECUTE statement
********** Error **********
ERROR: missing FROM-clause entry for table "test"
SQL state: 42P01
Context: PL/pgSQL function gettest() line 6 at EXECUTE statement
如何修复?
如何在不将vaue传递给plpgsql方法参数的情况下进行修复?没有“隐式当前行”这样的东西。必须将函数作为参数传递给函数。但是,如果您想:
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)
将引用该列而不是整个表(=行),因此它不起作用 从Postgres 9.0和更高版本开始,它会工作吗?@Andrus:我只在9.4中测试过它,但在9.0中也会工作,传递整行是否会为每一行创建一个新数组?还是将指针传递到游标中已定义的行?