gpt4 book ai didi

database - 在 PostgreSQL 函数中返回时使用 %rowtype

转载 作者:太空狗 更新时间:2023-10-30 01:53:45 25 4
gpt4 key购买 nike

如果我有一个函数,它只返回包含表中某些列的一行。我需要在函数返回声明中添加%rowtype吗?

CREATE OR REPLACE FUNCTION test(int n)
RETURNS tableName%rowtype AS
$BODY$
DECLARE
r tableName%rowtype;
BEGIN
select a,b,c into r from tableName where d=n;
return r;
$BODY$
END;

最佳答案

关于%ROWTYPE

%ROWTYPE 结构仅适用于可移植到其他 RDBMS。很少有用,因为 PL/pgSQL 函数一开始就很难移植。
如果您要使用它,它仅用于 PL/pgSQL 函数内的变量声明,而不是声明RETURN 类型,它是外部 SQL 语法的一部分。

The manual:

(Since every table has an associated composite type of the same name,it actually does not matter in PostgreSQL whether you write %ROWTYPEor not. But the form with %ROWTYPE is more portable.)

回答

这将实现您似乎正在尝试的目标:

CREATE OR REPLACE FUNCTION test_plpgsql(_n int)
RETURNS tbl
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN (SELECT t FROM tbl t where tbl_id = _n); -- selecting whole row
END
$func$;

调用:

SELECT * FROM test_plpgsql(1);

但如果就这么简单,请使用更简单的 SQL 函数开始:

CREATE OR REPLACE FUNCTION test_sql(_n int)
RETURNS SETOF tbl
LANGUAGE sql AS
$func$
SELECT * FROM tbl WHERE tbl_id = _n;
$func$;

调用:

SELECT * FROM test_sql(1);

您的原始代码示例存在太多问题。搜索更多掌握基本语法的示例。

关于database - 在 PostgreSQL 函数中返回时使用 %rowtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com