将多个变量初始化为postgresql存储过程中的记录
Initialize multiple variables as records in postgresql stored procedure
我有一个存储过程,我在其中将三个变量声明为记录并稍后按如下方式初始化它们:
CREATE OR REPLACE FUNCTION calculateUnitPrice()
RETURNS VOID AS
$$
DECLARE
amenities RECORD;
paramValues RECORD;
logsumAccessebility RECORD;
propertyType integer;
unitPrice float;
freehold integer;
tazId bigint;
unit RECORD;
BEGIN
FOR unit IN (SELECT * from main2012.fm_unit_res)
LOOP
amenities := getAmenitiesById(unit.sla_address_id);
tazId := toBigint(amenities.taz_id);
logsumAccessebility := getLogsumByTazId(tazId);
propertyType := getPropertyTypeFromUnitType(unit.unit_type);
paramValues := getParamValuesByPropertyType(propertyType);
freehold := 0;
unitPrice := paramValues.intercept + (paramValues.floor_area * ln(unit.floor_area)) + (paramValues.freehold * freehold) + (paramValues.logsum_accessebility * logsumAccessebility.accessibility);
UPDATE main2012.fm_unit_res SET rent = unitPrice WHERE fm_unit_id = unit.fm_unit_id;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
但是当我 运行 这个函数时,我得到了这样的错误:
ERROR: record "paramvalues" is not assigned yet
SQL state: 55000
Detail: The tuple structure of a not-yet-assigned record is indeterminate.
Context: PL/pgSQL function calculateunitprice() line 20 at assignment
请给我你的想法。我在这里做错了什么(语法)还是我可以在存储过程中初始化的记录数量有限制?
通过添加
调试输出
raise info '%',getPropertyTypeFromUnitType(unit.unit_type);
raise info '%',getPropertyTypeFromUnitType(unit.unit_type);
在声明 paramValues
之前
我有一个存储过程,我在其中将三个变量声明为记录并稍后按如下方式初始化它们:
CREATE OR REPLACE FUNCTION calculateUnitPrice()
RETURNS VOID AS
$$
DECLARE
amenities RECORD;
paramValues RECORD;
logsumAccessebility RECORD;
propertyType integer;
unitPrice float;
freehold integer;
tazId bigint;
unit RECORD;
BEGIN
FOR unit IN (SELECT * from main2012.fm_unit_res)
LOOP
amenities := getAmenitiesById(unit.sla_address_id);
tazId := toBigint(amenities.taz_id);
logsumAccessebility := getLogsumByTazId(tazId);
propertyType := getPropertyTypeFromUnitType(unit.unit_type);
paramValues := getParamValuesByPropertyType(propertyType);
freehold := 0;
unitPrice := paramValues.intercept + (paramValues.floor_area * ln(unit.floor_area)) + (paramValues.freehold * freehold) + (paramValues.logsum_accessebility * logsumAccessebility.accessibility);
UPDATE main2012.fm_unit_res SET rent = unitPrice WHERE fm_unit_id = unit.fm_unit_id;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
但是当我 运行 这个函数时,我得到了这样的错误:
ERROR: record "paramvalues" is not assigned yet
SQL state: 55000
Detail: The tuple structure of a not-yet-assigned record is indeterminate.
Context: PL/pgSQL function calculateunitprice() line 20 at assignment
请给我你的想法。我在这里做错了什么(语法)还是我可以在存储过程中初始化的记录数量有限制?
通过添加
调试输出raise info '%',getPropertyTypeFromUnitType(unit.unit_type);
raise info '%',getPropertyTypeFromUnitType(unit.unit_type);
在声明 paramValues