PowerBuilder无法通过PostgreSQL存储过程创建DataWindow问题咨询
PowerBuilder 2021与PostgreSQL存储过程作为DataWindow数据源的问题
核心结论
PowerBuilder 2021对PostgreSQL的PROCEDURE(存储过程)作为DataWindow数据源的支持存在限制,更适配PostgreSQL中返回结果集的FUNCTION(函数)。你遇到的报错本质是PostgreSQL的PROCEDURE无法被PowerBuilder识别为可提供结果集的数据源对象。
问题原因
PostgreSQL 11+引入的PROCEDURE主要用于执行无返回结果的操作(如数据修改、事务控制),即便在PROCEDURE内部写了SELECT语句,也不会主动将结果集返回给调用方;而DataWindow需要明确能返回结构化结果集的数据源,PowerBuilder对PostgreSQL的这种PROCEDURE类型的适配性不足,因此触发SQLSTATE = 42883错误(无法识别该对象为可执行并返回结果的查询对象)。
解决方案
将现有的PROCEDURE改为返回结果集的FUNCTION,示例代码如下:
CREATE OR REPLACE FUNCTION public.fn_employee() RETURNS SETOF employee LANGUAGE 'plpgsql' AS $BODY$ BEGIN RETURN QUERY SELECT * FROM employee; END $BODY$;
创建完成后,在PowerBuilder中按原步骤创建DataWindow:
- 选择
Stored procedure类型数据源 - 选择
fn_employee函数 - 后续步骤即可正常生成DataWindow
补充说明
如果业务上必须使用PROCEDURE,需要通过显式的结果集输出方式(如OUT参数),但PowerBuilder的DataWindow创建向导不支持这种调用逻辑,因此优先推荐使用FUNCTION作为返回结果集的数据源。
内容的提问来源于stack exchange,提问作者manaz
相关产品推荐
相关产品推荐

