sql - 存储 postgres 函数导致记录
问题描述
我正在尝试创建一些子功能,这些子功能将用于为我客户的数据库系统创建完全配置的产品。其中一个功能是根据一组参数计算商品的标价和折扣价。由于不同类型的项目是由不同的函数创建的,但计算价格的方式基本相同,我想要一个函数来计算我所有不同类型项目的标价和折扣价。
我的主函数(我们称之为 create_item)成功地向我的子函数(我们称之为 calculate_price)发送参数,并且我的子函数成功地发送回表中的标价和折扣价。我遇到的问题是如何将这些结果存储在主函数的记录中。
CREATE OR REPLACE FUNCTION create_item(
integer,
integer)
Returns VOID
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
accessory_price alias for $1;
customer_discount alias for $2;
list_price numeric;
discounted_price numeric;
returnRecord record;
BEGIN
SELECT * FROM calculate_price(accessory_price, customer_discount) INTO returnRecord;
list_price = SELECT list_price FROM returnRecord;
discounted_price = SELECT discounted_price FROM returnRecord;
END;
$BODY$;
----------END OF MAIN FUNCTION
----------BEGINNING OF SUB FUNCTION
CREATE OR REPLACE FUNCTION calculate_price(
integer,
integer)
RETURNS TABLE (
list_price numeric,
discounted_price numeric)
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
accessory_price alias for $1;
customer_discount alias for $2;
list_price numeric;
discounted_price numeric;
---*** INSERT LOGIC USED TO CALCULATE LIST_PRICE BASED ON VARIABLES
---*** INSERT LOGIC USED TO CALCULATE DISCOUNTED_PRICE BASED ON LIST_PRICE AND VARIABLES
RETURN QUERY SELECT list_price, discounted_price;
END;
$BODY$
到目前为止,这几乎可行。我可以通过发出通知来检查整个过程中的变量,并且一切都正确计算,但是当我尝试将 calculate_price 的结果存储到 returnRecord 中时,我收到一个错误“返回的结果没有地方可以存储”或类似的东西(对不起,我不记得确切的措辞)。对我做错了什么有帮助吗?
解决方案
您必须在主函数中进行一些更改(INTO returnRecord after * and returnRecord.list_price,returnRecord.discounted_price 而不是 select ),如下所示:
CREATE OR REPLACE FUNCTION create_item(
integer,
integer)
Returns VOID
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
accessory_price alias for $1;
customer_discount alias for $2;
list_price numeric;
discounted_price numeric;
returnRecord record;
BEGIN
SELECT * INTO returnRecord FROM calculate_price(accessory_price, customer_discount);
list_price = returnRecord.list_price;
discounted_price = returnRecord.discounted_price;
END;
$BODY$;
推荐阅读
- function - 在一个问题中,有人问我 x 是 1 的 3 维向量。有人可以告诉我如何在 matlab 函数中编写 x 吗?
- react-native - 为什么heroku因code=H10 status 503而崩溃
- java - 在 Spring Boot 中生成过滤
- django - 如何在 django 中将类属性作为我的模型类的参数传递
- date - SSRS 日期参数未显示正确日期
- matplotlib - 更改使用黄砖创建的分散图中的标题
- javascript - 为什么反应中的匹配媒体无法正常工作?
- r - Rshiny 数据分类和汇总统计错误
- python - numpy数组中的意外分配
- ios - SwiftUI UIDatePicker .compact 不会直接弹出