试图从PLV8存储过程返回表。
当函数使用$1时,它无法识别输入args,即RETURNS TABLE(...)。
当函数返回标量时,它可以工作:
psql# CREATE OR REPLACE function foo(integer)
RETURNS integer
LANGUAGE plv8
AS $$
var a=$1;
return a;
$$;
CREATE FUNCTION
psql# SELECT * FROM foo(10);
foo
-----
10
(1 row)如果函数是RETURNS SETOF,它也能工作。
(Case 1)具有自定义数据类型:
psql# CREATE TYPE myrow as (bar int);
CREATE TYPE
psql# CREATE OR REPLACE function foo(integer)
RETURNS SETOF myrow
LANGUAGE plv8
AS $$
var a=$1;
return {"bar": a};
// Or alternatively:
// return plv8.execute('SELECT ' + a +' AS bar');
$$;
CREATE FUNCTION
psql# SELECT * FROM foo(10);
bar
-----
10
(1 row)(Case 2)与SETOF record
psql# CREATE OR REPLACE function foo(integer)
RETURNS SETOF record
LANGUAGE plv8
AS $$
var a=$1;
return {"bar": a};
// Or alternatively:
// return plv8.execute('SELECT ' + a +' AS bar');
$$;
CREATE FUNCTION
psql# SELECT * FROM foo(10) AS xxx(bar int);
bar
-----
10
(1 row)但它似乎不适用于RETURNS TABLE
psql# CREATE OR REPLACE FUNCTION foo(integer)
RETURNS TABLE(bar int)
LANGUAGE plv8
AS $$
var a=$1;
return {"bar": a};
// Doesn't matter cause it doesn't make it here,
// but alternative 'return' also fails with same error:
// return plv8.execute('SELECT ' + a + ' AS bar');
$$;
CREATE FUNCTION
psql# SELECT * FROM foo(10);
ERROR: ReferenceError: $1 is not defined
DETAIL: foo() LINE 2: var a=$1;你知不知道为什么$1会让它窒息
我正在使用Postgres 9.4.0和Plv8 1.4.4。
发布于 2015-08-10 20:22:59
对于命名的参数,它似乎工作得很好。“创建或替换函数foo(整数)”
实际上,我在寻找如何从plv8函数返回多个值。作为将来的参考,OUT参数似乎是可行的。
CREATE OR REPLACE FUNCTION foo(a integer, OUT b integer, OUT c integer)
RETURNS setof record
LANGUAGE plv8
AS $$
return {b: a * 2, c: a * 10};
$$;https://stackoverflow.com/questions/31189363
复制相似问题