首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过INOUT参数返回未修改的数组

通过INOUT参数返回未修改的数组
EN

Stack Overflow用户
提问于 2012-06-12 14:59:57
回答 1查看 844关注 0票数 1

我使用的是PostgreSQL 9.1.3和以下函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION cad(INOUT args text[], OUT retval int4) AS $cad$
BEGIN
    retval := 0;
    RAISE NOTICE 'cad: %', args;
END;
$cad$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION dodo(in_args text[]) RETURNS text[] AS $dodo$
DECLARE
    _res    text[];
    _rv     int4;

BEGIN
    _res := in_args;
    EXECUTE 'SELECT cad($1)' USING _res INTO _res, _rv;

    RETURN _res;
END;
$dodo$ LANGUAGE plpgsql;

当我直接调用cad时,我得到了预期的输出:

代码语言:javascript
复制
psql$ select cad(ARRAY['Quiz']);
NOTICE:  cad: {Quiz}
-[ RECORD 1 ]---
cad | ({Quiz},0)

Time: 0,319 ms

我对dodo(ARRAY['Quiz'])调用的预期结果是没有更改的输入数组。但是我收到了下面的错误:

代码语言:javascript
复制
psql$ select dodo(ARRAY['Quiz']); 
NOTICE:  cad: {Quiz}CONTEXT:  SQL statement "SELECT cad($1)"
PL/pgSQL function "dodo" line 8 at EXECUTE statement
ERROR:  array value must start with "{" or dimension information
CONTEXT:  PL/pgSQL function "dodo" line 8 at EXECUTE statement

这里出了什么问题?

附言:我不得不使用EXECUTE,因为调用的函数会有所不同,为了便于提问,代码也被简化了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-12 20:08:27

你想要这样的东西:

代码语言:javascript
复制
EXECUTE 'SELECT * FROM cad($1)' USING _res INTO _res, _rv;

返回类型不是两列的text[],而是需要解包的(text[],int)的记录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10991827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档