jde*_*vio 4 sql postgresql ddl stored-functions
我正在尝试在PostgreSQL中创建一个存储过程。当我使用时float,该函数有效,但是当我尝试将floats 更改numeric为时出现错误:
ERROR: cannot change return type of existing function
SQL state: 42P13
Detail: Row type defined by OUT parameters is different.
Hint: Use DROP FUNCTION percent_grades(text) first.
Run Code Online (Sandbox Code Playgroud)
我真的不知道这是什么意思,但是除了CAST更改,我不需要执行任何其他操作type。
我的职能是:
CREATE OR REPLACE FUNCTION percent_grades(text)
RETURNS TABLE(grade text, percent float)
AS
$$
DECLARE percent_total float;
BEGIN
RETURN QUERY
SELECT psa_grade_name,
SUM(psa_amount) / CAST(total_cards($1) AS float) AS percent_total
FROM psa_pop_view
WHERE psa_card = $1
GROUP BY psa_grade_name
ORDER BY psa_grade_name;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我想替换float为s numeric(5, 4)。
一个create or replace语句不能更改函数的签名。如错误所示,您必须首先删除该函数:
DROP FUNCTION percent_grades(text);
Run Code Online (Sandbox Code Playgroud)
然后才用正确的签名重新创建它:
CREATE OR REPLACE FUNCTION percent_grades(text)
RETURNS TABLE(grade text, percent numeric(5,4))
AS
$$
DECLARE percent_total float;
BEGIN
RETURN QUERY
SELECT psa_grade_name,
SUM(psa_amount) / CAST(total_cards($1) AS float) AS percent_total
FROM psa_pop_view
WHERE psa_card = $1
GROUP BY psa_grade_name
ORDER BY psa_grade_name;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |