postgresql – 返回带有函数列名的ResultSet
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了postgresql – 返回带有函数列名的ResultSet,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1841字,纯文字阅读大概需要3分钟。
内容图文
![postgresql – 返回带有函数列名的ResultSet](/upload/InfoBanner/zyjiaocheng/897/04e89bcad657423487c9f0cd57da0c0b.jpg)
我有以下postgresql函数:
CREATE OR REPLACE FUNCTION readMessage(messageFor INT, qid INT = NULL, ctxt INT = NULL, messageFrom INT = NULL, byTimeStamp BOOLEAN = FALSE)
RETURNS SETOF message
AS $$
DECLARE
sql varchar;
BEGIN
sql := 'SELECT * FROM message WHERE (receiver_id IS NULL OR receiver_id = $1)';
IF qid IS NOT NULL THEN
sql := sql || ' AND queue_id = $2';
END IF;
IF ctxt IS NOT NULL THEN
sql := sql || ' AND context = $3';
ELSE
sql := sql || ' AND context IS NULL';
END IF;
IF $4 IS NOT NULL THEN
sql := sql || ' AND sender_id = $4';
END IF;
sql := sql || ' ORDER BY';
IF byTimeStamp THEN
sql := sql || ' arrive_time ASC';
ELSE
sql := sql || ' priority DESC';
END IF;
sql := sql || ' LIMIT 1';
RETURN QUERY EXECUTE sql
USING messageFor, qid, ctxt, messageFrom;
END;
$$
LANGUAGE plpgsql;
现在,上面的函数工作正常,但resultSet不包含列名(例如:一个简单的SELECT语句返回带有列名的结果).我需要能够在Java代码中访问上述函数的结果:
Connection con;
PreparedStatement ps = con.prepareStatement("select readMessage(1, 1, 1, 1, true))";
ResultSet rs = ps.executeQuery();
rs.getInt(<column-name>)
代替
rs.getInt(<column-index>)
更可读的代码.如何修改我的postgresql FUNCTION来实现这个目的?
解决方法:
考虑以下示例:
CREATE TABLE test.child (
id integer,
p_id1 integer,
p_id2 integer
);
CREATE OR REPLACE FUNCTION named_cols()
RETURNS SETOF test.child
AS $$
SELECT 0, 12, 23;
$$LANGUAGE sql;
SELECT named_cols();
named_cols
────────────
(0,12,23)
SELECT * FROM named_cols();
id │ p_id1 │ p_id2
────┼───────┼───────
0 │ 12 │ 23
如果以第一种方式调用该函数,则将返回没有列名的记录.看起来你是在第二个之后 – 你会遇到与任何编程语言相同的行为,而不仅仅是Java.
内容总结
以上是互联网集市为您收集整理的postgresql – 返回带有函数列名的ResultSet全部内容,希望文章能够帮你解决postgresql – 返回带有函数列名的ResultSet所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。