postgresql 参数替换 游标_PostgreSQL 如何方便的查看游标结果做验证

本文介绍了如何在 PostgreSQL 中创建和使用游标进行数据验证。通过示例展示了存储过程的创建,以及在命令行和管理工具中操作游标的步骤,强调了游标在存储过程中的管理和重新定位。
摘要由CSDN通过智能技术生成

--1.创建模拟数据

DROP TABLE test;

CREATE TABLE test(id int, info text);

INSERT INTO test SELECT generate_series(1, 10), 'test';

--2.创建存储过程

CREATE OR REPLACE FUNCTION test_1() RETURNS refcursor AS

$BODY$

DECLARE

CURSOR c1 FOR SELECT * FROM test;

BEGIN

OPEN c1;

RETURN c1;

END

$BODY$

LANGUAGE plsql;

--3.在命令行中可以查询:

TEST=# BEGIN;

BEGIN

TEST=# SELECT test_1();

TEST_1

--------

C1

(1 row)

TEST=# FETCH 5 IN "C1";

ID | INFO

----+------

1 | test

2 | test

3 | test

4 | test

5 | test

(5 rows)

TEST=# END;

COMMIT

--4.管理工具需要在匿名块中执行:

DO

$$

DECLARE

ret_ref refcursor;

one_row record;

BEGIN

OPEN ret_ref FOR SELECT 1 ;

ret_ref := test_1();

FETCH ret_ref INTO one_row;

WHILE ret_ref%FOUND LOOP

raise notice 'id is: %, text is: %', one_row.id, one_row.info;

FETCH NEXT IN ret_ref INTO one_row;

END LOOP;

CLOSE ret_ref;

END

$$

结果:

00000: id is: 1, text is: test

00000: id is: 2, text is: test

00000: id is: 3, text is: test

00000: id is: 4, text is: test

00000: id is: 5, text is: test

00000: id is: 6, text is: test

00000: id is: 7, text is: test

00000: id is: 8, text is: test

00000: id is: 9, text is: test

00000: id is: 10, text is: test

--注意:如果在存储过程中,已经消费了,则返回的游标需要重新定位到开始

--5.处理out参数的游标,一样的:

CREATE OR REPLACE FUNCTION test_2(v_id int, c1 OUT refcursor) RETURNS refcursor AS

$BODY$

DECLARE

BEGIN

OPEN c1 FOR SELECT * FROM test WHERE id < v_id;

END

$BODY$

LANGUAGE plsql;

DO

$$

DECLARE

ret_ref refcursor;

one_row record;

BEGIN

OPEN ret_ref FOR SELECT 1 ;

ret_ref := test_2(6);

FETCH ret_ref INTO one_row;

WHILE ret_ref%FOUND LOOP

raise notice 'id is: %, text is: %', one_row.id, one_row.info;

FETCH NEXT IN ret_ref INTO one_row;

END LOOP;

CLOSE ret_ref;

END

$$

结果:

00000: id is: 1, text is: test

00000: id is: 2, text is: test

00000: id is: 3, text is: test

00000: id is: 4, text is: test

00000: id is: 5, text is: test

标签:PostgreSQL,验证,text,游标,ret,00000,test,ref,id

来源: https://www.cnblogs.com/kuang17/p/14005841.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值