powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ошибка при вызове в теле функции другой функции
3 сообщений из 3, страница 1 из 1
Ошибка при вызове в теле функции другой функции
    #39684605
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, у меня возникла следующая проблема:
Есть функция ValidateCalibrationHistBuffer:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE FUNCTION "ValidateCalibrationHistBuffer"()
RETURNS VOID AS $$
DECLARE v_curD DATE; v_stD DATE; v_minD DATE;
DECLARE v_table SMALLINT; v_mark SMALLINT;
DECLARE err_days SMALLINT;
BEGIN
      err_days= (SELECT "GetRefErrDays"());
      v_table=1;
      v_curD = CURRENT_DATE;

     SELECT "ERS_Get_Table_Mark"(v_table, v_minD, v_stD, v_mark);<-----Вызов функции
    
     --другие команды , использующие значения переменных v_minD, v_stD, v_mark

END;
$$ LANGUAGE plpgsql;


в которое осуществляется вызов следующей функции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE FUNCTION "ERS_Get_Table_Mark" (v_table SMALLINT, OUT v_date_min DATE, OUT v_date DATE, OUT v_mark SMALLINT)
AS $$
DECLARE v_stD date;
DECLARE v_minD date;
DECLARE v_opt varchar(80);
BEGIN

SELECT START_DATE INTO v_stD FROM ERS_PERIODS_START WHERE TABLE_ID=v_table;

IF v_stD IS NULL THEN
	v_date=CURRENT_DATE + integer '1';
	v_date_min=v_date;
	v_mark=2;
ELSE
	SELECT VALUE INTO v_opt FROM CONFIGURATION WHERE NAME='ERS_Load_Old';
	SELECT MIN(START_DATE) INTO v_minD FROM ERS_PERIODS WHERE TABLE_ID=v_table;
	v_date=v_stD;
	v_date_min=v_minD;
	v_mark=CASE WHEN v_opt='0' THEN 19 ELSE 18 END;
END IF;
END;
$$ LANGUAGE plpgsql;


При выполнении следующей команды:
Код: sql
1.
select "ValidateCalibrationHistBuffer"();


возникает следующая ошибка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ERROR:  ОШИБКА:  функция ERS_Get_Table_Mark(smallint, date, date, smallint) не существует
LINE 1: SELECT "ERS_Get_Table_Mark"(v_table, v_minD, v_stD, v_mark)
               ^
HINT:  Функция с данными именем и типами аргументов не найдена. Возможно, вам следует добавить явные приведения типов.
QUERY:  SELECT "ERS_Get_Table_Mark"(v_table, v_minD, v_stD, v_mark)
CONTEXT:  функция PL/pgSQL "ValidateCalibrationHistBuffer"(), строка 10, оператор SQL-оператор


SQL-состояние: 42883
Вопрос : как её устранить?
...
Рейтинг: 0 / 0
Ошибка при вызове в теле функции другой функции
    #39684672
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986,

хотя выходные параметры и описывается в параметрах функции, обращаться с ними как с параметрами нельзя.
Используйте синтаксис select .. into ...:
Код: sql
1.
2.
SELECT v_date_min, v_date, v_mark into v_minD, v_stD, v_mark 
from  "ERS_Get_Table_Mark"(v_table);
...
Рейтинг: 0 / 0
Ошибка при вызове в теле функции другой функции
    #39684907
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,
Да я именно так и сделал спасибо:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE FUNCTION "ValidateCalibrationHistBuffer"()
RETURNS VOID AS $$
DECLARE v_curD DATE; v_stD DATE; v_minD DATE;
DECLARE v_table SMALLINT; v_mark SMALLINT;
DECLARE err_days SMALLINT;
BEGIN
  err_days= (SELECT "GetRefErrDays"());
  v_table=1;
  v_curD = CURRENT_DATE;

  SELECT * FROM "ERS_Get_Table_Mark"(v_table) INTO v_minD,v_stD, v_mark;
....
END;
$$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ошибка при вызове в теле функции другой функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]