繁体   English   中英

从PostgreSQL存储过程中返回带有列名的ResultSet

[英]Return ResultSet with column names from postgresql Stored procedures

我有以下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>) // for example: 'queue_id', 'context' etc. 

代替

rs.getInt(<column-index>)

以获得更具可读性的代码。 我如何修改我的postgresql FUNCTION来实现这一目标?

好了,有一个非常简单的解决方案可以实现我想要的目的(尽管它并没有修改FUNCTION)。 在Java中,只需调用

PreparedStatement ps = con.prepareStatement("select * from readMessage(1, 1, 1, 1, true))";

代替

PreparedStatement ps = con.prepareStatement("select readMessage(1, 1, 1, 1, true))";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM