Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在plpgsql函数中获取当前行值_Sql_Postgresql_Plpgsql_Postgresql 9.1 - Fatal编程技术网

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

如何在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

我需要创建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
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中也会工作,传递整行是否会为每一行创建一个新数组?还是将指针传递到游标中已定义的行?