处理 PostgreSQL %ROWTYPE returns

Dealing with PostgreSQL %ROWTYPE returns

我有一个 PostgreSQL 函数,如下所示:

CREATE FUNCTION myFunc() returns myTable as $$
DECLARE
my_row myTable%ROWTYPE;
BEGIN
select * into strict my_row where......
return my_row
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE EXCEPTION 'Blame the user !'
USING HINT = 'Its always the users fault !';
END;
$$ LANGUAGE plpgsql;

问题是,当我在 Java 中调用它并尝试从 ResultSet 中获取一个项目时,例如rs.getString(1),而不是获取该列,我获取整个行表示,即 rs.getString(1) 产生一个看起来像这样的字符串:

"("col1data","col2data",etc. etc.)"

如何正确执行此操作?

你得到了打包的复合值。您必须通过 FROM 子句

解压此值
CREATE OR REPLACE FUNCTION public.fx()
RETURNS foo LANGUAGE plpgsql
AS $function$
BEGIN
  RETURN (SELECT ROW(a,b) FROM foo LIMIT 1);
END;
$function$

postgres=# SELECT * FROM foo;
 a  | b  
----+----
 10 | 20
(1 row)

postgres=# SELECT fx(); -- packed composite
   fx    
---------
(10,20)
(1 row)

postgres=# SELECT * FROM fx(); -- unpacked composite
 a  | b  
----+----
 10 | 20
(1 row)