我创建了一个自定义类型
CREATE TYPE rc_test_type AS (a1 bigint);
和一个函数
CREATE OR REPLACE FUNCTION public.rc_test_type_function(test_table character varying, dummy integer)
RETURNS rc_test_type AS
$BODY$
DECLARE
ret rc_test_type;
query text;
BEGIN
query := 'SELECT count(*) from ' || test_table ;
EXECUTE query into ret.a1;
RETURN ret;
END $BODY$
LANGUAGE plpgsql VOLATILE
如果我跑
SELECT * FROM rc_test_type_function('some_table', 1);
我明白了
"a1"
1389
到目前为止,一切都很好。
如果我跑
SELECT p FROM (SELECT rc_test_type_function('some_table', s.step) AS p
FROM some_other_table s) foo;
我明白了
"p"
"(1389)"
"(1389)"
因为 'some_other_table' 只有两条记录。美好的。
但是如果我尝试
SELECT p.a1 FROM (select rc_test_type_function('some_table', s.step) AS p
FROM some_other_table s) foo;
我得到错误
表»p«的子查询中缺少 FROM 子句条目
我觉得很奇怪,因为子查询没有改变。
两个问题:
- 谁能解释发生了什么?
- 如何
a1
从返回的数组中提取字段值?