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窗口中:
--在DBeaver中完美显示多游标结果集数据/1094286986.png)
新方法是采用命名游标方式,通过Fetch All FROM p1语句直接将数据显示在数据窗口中。
--在DBeaver中完美显示多游标结果集数据/3152135721.png)
通过对比可以看到,新方法代码简洁易读,代码量减少一半以上,并且数据显示在数据窗口中,容易与Sybase的返回结果集做比较。
注意事项:
1. 确保游标的名称在存储过程中正确传递,并且在 FETCH 语句中使用相同的名称。
2. 新方法中启动了事务,如果中途出现异常,需要手工调用一次rollback,回滚事务。
总结
通过上述新方法,可以在 DBeaver 中方便地查看和导出游标数据。这不仅有助于提升代码开发效率,同时也方便调试和测试。