使用查询结果中的所有参数调用PostgreSQL中的函数

时间:2015-02-10 13:35:31

标签: postgresql stored-procedures parameter-passing

我有一个存储过程需要一些参数:

CREATE OR REPLACE FUNCTION USP_GET_FAID(IN "IN_metricsId"   TEXT,
                                    IN "IN_shop"        TEXT,
                                    IN "IN_shopUserId"  TEXT,
                                    IN "IN_session"     TEXT DEFAULT NULL,
                                    IN "IN_ipHash"      TEXT DEFAULT NULL,
                                    IN "IN_shopSession" TEXT DEFAULT NULL,
                                    IN "IN_userAgent"   TEXT DEFAULT NULL) 
RETURNS INT8 AS $$

我想调用此存储过程并通过SELECT查询的结果提供参数,因此存储过程将针对每一行运行。
我不关心函数返回的内容,因此可以忽略它。

怎么可能这样做(如果有的话)?

2 个答案:

答案 0 :(得分:3)

如果函数只返回一个值并且参数都来自select语句,则只需在选择列表中调用它即可:

select shop_id, usp_get_faid(metrics_id, shop, shop_id, shop_user_id, session, ip_hash, shop_session, user_agen)
from session_table

这假设所有这些列都是session_table表的一部分。

答案 1 :(得分:1)

如果您的所有输入参数都来自单个表,则可以简化并传递单行类型:

CREATE OR REPLACE FUNCTION usp_get_faid(_tbl my_tbl) 
  RETURNS int8 AS ...

然后:

SELECT usp_get_faid(t) FROM my_tbl t WHERE my_tbl_id = 123;

如果表中包含一些函数中实际不需要的额外列,则无关紧要。只需使用你需要的东西......

这实际上适用于任何列的组合,但是您需要注册的行类型,并且会自动为每个表注册行类型。