2015-08-22 2 views
3

Я пытаюсь создать хранимую процедуру в PostgreSQL. Функция работает, когда я использую float, но когда я пытаюсь изменить float с до numeric я получаю сообщение об ошибке:Функция PostgreSQL числовой тип ошибки

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. 

Я действительно не знаю, что это значит, но я не думаю, что я d необходимо сделать что-либо кроме 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; 

Я хочу, чтобы заменить float с с numeric(5, 4).

ответ

3

a create or replace заявление не может изменить подпись функции. Как говорит об ошибке, необходимо сначала удалить функцию:

DROP FUNCTION percent_grades(text); 

И только затем воссоздать его с правой подписью:

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;