处理 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)
我有一个 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)