我有一个存储过程需要一些参数:
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查询的结果提供参数,因此存储过程将针对每一行运行。
我不关心函数返回的内容,因此可以忽略它。
怎么可能这样做(如果有的话)?
答案 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;
如果表中包含一些函数中实际不需要的额外列,则无关紧要。只需使用你需要的东西......
这实际上适用于任何列的组合,但是您需要注册的行类型,并且会自动为每个表注册行类型。