当前位置: 首页 > 面试题库 >

SQL函数返回类型:TABLE vs SETOF记录

范弘亮
2023-03-14
问题内容

返回TABLEvs的函数有什么区别SETOF records,其他所有条件相等。

CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint, name text) AS $$
    SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;

CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$
    SELECT id, name FROM events WHERE type = $1;
$$ LANGUAGE SQL STABLE;

这些函数似乎返回相同的结果。请参阅此SQLFiddle。


问题答案:

返回时SETOF record,输出列未键入且未命名。因此,这种形式不能像在子查询或表中一样直接在FROM子句中使用。

即,在发行时:

SELECT * from events_by_type_2('social');

我们得到这个错误:

错误:返回“记录”的函数需要列定义列表

但是,SQL调用者可以将其“广播”为正确的列类型。此表格可以正常工作:

SELECT * from events_by_type_2('social') as (id bigint, name text);

结果为:

id | 姓名      
---- + ----------------
  1 | 舞会
  2 | 欢乐时光
 ...

因此,SETOF record被认为不太实用。仅在事先不知道结果的列类型时才应使用它。



 类似资料:
  • 问题内容: 我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为struct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于 问题答案: 快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的

  • 我想通过TypeScript泛型定义函数返回类型。所以R可以是我将定义的任何东西。 <代码>。。。许诺 错误:(29,9)TS2322:类型“字符串”不可分配给类型“R”。“字符串”可分配给类型“R”的约束,但“R”可以用约束“{}”的不同子类型实例化。

  • 问题内容: 我有一个返回记录类型的函数。 我想从Java代码中调用此函数,并在Java中获取该记录类型。请指导我如何做。谢谢 问题答案: 首先让我们从更正您的代码开始。我可以看到您发布的代码无法编译,并且会引发问题。正确的代码如下: 执行此代码时,您可能会遇到类似的问题。这是因为a 仅限在中使用。 ORA-00902:无效的数据类型 最好的方法是先创建一个对象的a 和a ,然后在您的函数中创建它:

  • 我有这个异步函数,并试图返回一个对象或null。 但是我在定义类型时出错了。 如何定义这种数据类型? 类型“ContactId | null”不可分配给类型“string | null” 类型“ContactId”不能分配给类型“string”。

  • 注意:请通读后再回答。这看起来是一个简单的问题,但我不确定它是否如此简单。另外,我是打字新手,所以对我宽容点 所以这是用例。我有一个模型用户,我编写了一个通用函数来根据数据库中的电子邮件检查用户是否存在。如果存在,则返回用户对象。 现在,如果它是任何其他对象,那么我可以定义类型并继续我的代码,但它是我从DB得到的用户对象,不知道如何解决这个问题。 我通过提到返回类型“any”找到了解决方法,但我的

  • 本文向大家介绍Pythonround()函数平局和返回类型,包括了Pythonround()函数平局和返回类型的使用技巧和注意事项,需要的朋友参考一下 示例 round() 在Python 2中,使用round()相等接近两个整数的数字将返回距离0最远的数字。例如: Python 2.x 2.7 然而,在 Python 3中,round ()将返回偶数(即银行的四舍五入)。例如: Python 3