`
manjingtou
  • 浏览: 121152 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

postgresql record 使用

阅读更多

 

今天在做postgresql 存储过程的时候,遇到了一个问题,找了好多资料没有解决,最后经过思考终于解决了

创建一个存储过程

CREATE OR REPLACE FUNCTION test(OUT name character varying, OUT _cur refcursor )
  
RETURNS record AS
$BODY$
DECLARE
    _geom geometry;
BEGIN
  name 
= '11';
  
open _cur  for   SELECT id,name FROM test_tab;
  
--id ='222'; 
END;
$BODY$
  LANGUAGE 
'plpgsql' VOLATILE
  COST 
100;
ALTER FUNCTION test() OWNER TO pg;

就是上面这个存储过程,我需要调用这个存储过程得到输出(返回的参数)。

文档中这样描述的:

记录类型(record):

纪录变量类似行类型变量,但是它们没有预定义的结构。 它们在SELECT或者FOR命令中获取实际的行结构。 一个行变量的子结构可以在每次赋值的时候改变。 这样做的一个结果是:在一个记录变量被赋予数值之前,它没有子结构, 并且任何对其中的数据域进行访问的企图都将产生一个运行时错误。

请注意 RECORD 不是真正的数据类型,只是一个占位符。 我们还应该意识到在把一个 PL/pgSQL 函数声明为返回record类型的时候, 它和一个记录变量的概念并不完全相同,即使这个函数可能使用一个记录变量保存它的结果也如此。 在两种情况下,在书写函数的时候,实际的行结构都是不知道的,但是对于返回 record 的函数来说, 实际的结构是在调用它的查询被分析的时候决定的,而行变量可以在运行中改变其行结构。


使用方法:如获得上面函数的返回结果
select ok.name,ok._cur from test() as ok(name character varying,_out refcursor)

但是这样会报错误

ERROR:  a column definition list is only allowed for functions returning "record"

解决方法:
直接使用函数名称+"."的方式解决
select test.name,test._cur from test()
分享到:
评论

相关推荐

    MyBatis Generator + PostgreSQL 逆向工程单独使用包及使用说明.rar

    PostgerSQL的jar包版本:postgresql-9.3-1102-jdbc4.jar mybatis-generator版本:mybatis-generator-core-1.3.7.jar 关于逆向工程自动生成dao层代码的功能,网上很多介绍的都是mysql版本的,而且介绍的都是在开发...

    PostgreSQL_与_MS_SQLServer比较

    - **PostgreSQL** 中,如果需要返回结果集,通常会定义一个返回表类型的函数,使用 `RETURNS SETOF record` 或 `RETURNS TABLE`。 #### 在存储过程中访问或调用函数 - **MS SQL Server** 中可以通过 `EXEC` 或 `...

    PostgreSQL Developer s Guide

    Declaring the Row-Type and Record Type Variables - **行类型变量**: 表示表中一行的所有列。 - **记录类型变量**: 用户自定义的复合数据类型,可以包含不同类型的字段。 ##### 6. Statements and Expressions -...

    PostgreSQL数据分页技术概述.pptx

    本文总结了 PostgreSQL 数据分页技术的概述,介绍了在大数据量时如何高效地使用模糊查询和数据分页浏览,并根据后台设计降低用户界面的使用复杂程度。 一、数据分页浏览技术 数据分页浏览技术是开发中基本都会用到...

    Postgresql存储过程

    Postgresql存储过程是指在Postgresql数据库中定义的一组SQL语句的集合,它可以完成复杂的操作,并且可以重复使用。Postgresql存储过程可以用来实现业务逻辑,减少数据库服务器的压力和网络传输的数据量。 一、存储...

    postgresql-10.1-3-windows-x64.zip

    对于Odoo用户来说,了解如何使用Python进行数据库交互,如通过psycopg2库连接PostgreSQL,编写查询,以及集成到Odoo模块开发中,是非常重要的。 在压缩包内的“postgresql-10.1-3-windows-x64.exe”文件,是...

    mysql postgresql Greenplum 实时同步

    1. **数据读取与转化**:Bireme从数据源读取数据(Record),将其转化为内部格式(Row)并进行缓存。 2. **任务构建与执行**:当缓存的数据量达到一定阈值后,Bireme会将这些数据合并为一个任务(Task),每个任务包含两个...

    Packt.PostgreSQL.Developer's.Guide.2015

    开始使用 PostgreSQL **1.1 写查询语句使用 psql** - **psql**: PostgreSQL 的命令行工具,用于执行 SQL 查询。 - **常用操作**: 通过 `SELECT`、`UPDATE`、`DELETE` 等 SQL 命令进行数据操作。 **1.2 创建、...

    Postgresql存储过程.docx

    PostgreSQL 存储过程支持多种变量类型,包括内置类型和 RECORD 类型。RECORD 类型表示一条记录,可以包含多个字段。变量的声明和赋值方式如下所示: ``` DECLARE 变量名 变量类型; 变量名 := 值; ``` 三、连接字符 ...

    postgresql日志部分代码分析

    - PostgreSQL使用REDOMethod进行恢复,但其实质包含了UNDO/REDO信息,这得益于MVCC模型。 - 检查点是恢复过程的关键,它标记了所有在检查点之前提交的事务,这些事务的状态无需再进行UNDO操作。 通过理解...

    PHP_PostgreSQL_访问类

    在PHP中与PostgreSQL数据库进行交互是常见的开发需求,而使用专门的访问类可以极大地简化这一过程。本文将详细介绍一个简单的PHP PostgreSQL访问类,帮助开发者理解其工作原理及如何使用。 首先,这个访问类主要...

    Laravel开发-eloquent-postgresql

    Eloquent使用Active Record设计模式,这意味着每个模型都直接对应数据库中的一个表。 在默认情况下,Laravel的Eloquent支持MySQL和SQLite数据库,但通过Pogount扩展,我们可以轻松地将Laravel项目连接到PostgreSQL...

    PHP连接及操作PostgreSQL数据库的方法详解

    在上述代码中,使用了PostgreSQL的SQL命令CREATE TABLE来创建表,并使用pg_query函数执行SQL语句。如果创建表成功,则输出"Table created successfully"。 在创建表之后,接下来是插入数据的操作。以下是向COMPANY...

    ar_pg_json:使用PostgreSQL json聚合函数包装Active Record查询直接输出为json

    `ar_pg_json` 是一个针对PostgreSQL数据库的工具,它允许开发者使用Active Record查询直接生成JSON格式的结果,而无需经过额外的序列化步骤。这个库特别适合那些需要高效地返回JSON格式数据的API或Web服务。 `ar_pg...

    active_record-pgcrypto:PostgreSQL PGCrypto对ActiveRecord的支持

    而`active_record-pgcrypto`是针对PostgreSQL数据库的一个扩展,它提供了对PGCrypto加密功能的集成,以便在ActiveRecord中安全地处理敏感数据。 PGCrypto是PostgreSQL数据库提供的一个模块,包含了一系列加密和哈希...

    postgresqlInclude

    在PL/pgSQL语言中,可以定义复杂的数据结构,如记录类型(record types),它们可以包含多个字段,类似结构体。这允许存储和处理复杂的、自定义的数据格式。 8. **复制和包含**: PostgreSQL支持多种复制模式,如...

    PostgreSQL实战之启动恢复读取checkpoint记录失败的条件详解

    2. 使用XLogReadRecord函数读取checkpoint记录时返回NULL值,意味着在该位置未读取到有效的日志记录。 3. 虽然读取到了记录,但该记录的rmid(记录的资源管理器ID)不等于RM_XLOG_ID,这表示该记录并非由XLOG资源...

    pgtap:PostgreSQL单元测试套件

    **pgtap:PostgreSQL单元测试套件** pgtap是一个用于PostgreSQL数据库的开源测试套件,它基于TAP(Test Anything Protocol)协议,为PostgreSQL的SQL和PL/pgSQL存储过程提供了一种方便、结构化的单元测试方法。TAP...

    CynosDB+for+PostgreSQL+一主多读架构-孙旭.pdf

    而MTR粒度的访问页面指的是最小事务记录(Minimal Transaction Record)级别的操作,这确保了即使在多从节点环境下,数据对象的结构依然能保持完整性。多版本数据Buffer则指的是系统在操作数据时,会为事务保留数据...

Global site tag (gtag.js) - Google Analytics