PG迁移必读(十四): 在DBeaver数据窗口中完美显示游标数据集
Barry Chen

前言:当存储过程返回游标时,一般是无法直接在DBeaver的数据窗口中显示结果数据的。常用方法是通过手写Raise Notice ‘%’, record 方式将数据逐行写到Output窗口中。这导致编写Unit Test时工作量大幅增加。本文介绍一种简单的解决方案,可以直接将游标数据集显示在DBeaver的数据窗口上,有效降低了测试代码量,提升了开发效率。

考虑以下一个存储过程,该存储过程返回两个游标:

Create Or Replace Procedure proc2( INOUT p1 refcursor,INOUT p2 refcursor

LANGUAGE PlPgSQL

AS $$ 

BEGIN

open p1 for select * from t1;

open p2 for select * from t2;

END;$$;

  

原有方法是通过写以下Raise Notice,将数据逐行写到Output窗口中:
 

 

 

新方法是采用命名游标方式,通过Fetch All FROM p1语句直接将数据显示在数据窗口中。

 

通过对比可以看到,新方法代码简洁易读,代码量减少一半以上,并且数据显示在数据窗口中,容易与Sybase的返回结果集做比较。

注意事项:
1. 确保游标的名称在存储过程中正确传递,并且在 FETCH 语句中使用相同的名称。

2. 新方法中启动了事务,如果中途出现异常,需要手工调用一次rollback,回滚事务。

总结

通过上述新方法,可以在 DBeaver 中方便地查看和导出游标数据。这不仅有助于提升代码开发效率,同时也方便调试和测试。