相关疑难解决方法(0)

从函数返回setof记录(虚拟表)

我需要一个Postgres函数来返回一个带有自定义内容的虚拟表(就像在Oracle中一样).该表将有3列和未知行数.

我在互联网上找不到正确的语法.

想象一下:

CREATE OR REPLACE FUNCTION "public"."storeopeninghours_tostring" (numeric)
  RETURNS setof record AS
DECLARE
  open_id ALIAS FOR $1;
  returnrecords setof record;
BEGIN
  insert into returnrecords('1', '2', '3');
  insert into returnrecords('3', '4', '5');
  insert into returnrecords('3', '4', '5');
  RETURN returnrecords;
END;
Run Code Online (Sandbox Code Playgroud)

这怎么写的正确?

sql postgresql stored-procedures plpgsql

37
推荐指数
5
解决办法
8万
查看次数

重构PL/pgSQL函数以返回各种SELECT查询的输出

我写了一个函数,输出一个SELECT以文本形式组成的PostgreSQL 查询.现在我不想再输出文本,但实际上SELECT对数据库运行生成的语句并返回结果 - 就像查询本身一样.

到目前为止我所拥有的:

CREATE OR REPLACE FUNCTION data_of(integer)
  RETURNS text AS
$BODY$
DECLARE
   sensors varchar(100);   -- holds list of column names
   type    varchar(100);   -- holds name of table
   result  text;           -- holds SQL query
       -- declare more variables

BEGIN
      -- do some crazy stuff

      result := 'SELECT\r\nDatahora,' || sensors ||
      '\r\n\r\nFROM\r\n' || type ||
      '\r\n\r\nWHERE\r\id=' || $1 ||'\r\n\r\nORDER BY Datahora;';

      RETURN result;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION data_of(integer) OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

sensors …

sql database postgresql dynamic-sql plpgsql

32
推荐指数
1
解决办法
2万
查看次数

从PostgreSQL存储过程返回记录集的最简单方法是什么?

我只是有一个表格,其中包含国家列表及其ISO国家/地区代码.我将查询包装在存储过程(也称为函数)中,例如:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof record AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ERROR:  a column definition list is required for functions returning "record"
Run Code Online (Sandbox Code Playgroud)

我知道我可以定义一个TYPE,然后像光标一样循环遍历记录集,但是在更新版本的PostgreSQL(我使用的是8.4.3)下,有更好的方法可以做到这一点,但我正在尝试要记住.


编辑:

这有效:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof country_codes AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

请注意"RETURNS setof [table name]".但它似乎并不是最灵活的.如果我尝试返回多个表的连接,它就会崩溃.

sql postgresql stored-procedures plpgsql

9
推荐指数
2
解决办法
2万
查看次数

PLSQL中IN,OUT,IN OUT参数的区别

请告诉我PL/SQL中IN,OUT,IN OUT参数之间有什么区别.以及如何使用PL/SQL过程返回多个值.

oracle plsql

6
推荐指数
1
解决办法
2万
查看次数