powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция с данными именем и типами аргументов не найдена. как исправить?
6 сообщений из 6, страница 1 из 1
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076146
Eva2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написала функцию для добавления в таблицу :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
CREATE OR REPLACE FUNCTION public.add_doc(doc_name text, amount int,  newtip_name text, new_izd bool,
										  newotr_name text, _author text, _izdat text, _god int )
RETURNS boolean
LANGUAGE plpgsql 
AS $function$declare
return_val boolean := true;
new_tipid int = -1;
new_izdid int = -1;
new_otrid int = -1;

tip_cursor CURSOR (firstCursor TEXT) FOR SELECT "шифр типа" FROM тип 
WHERE 
 "тип" = firstCursor;
izd_cursor CURSOR (secondCursor bool) FOR SELECT "шифр издания" FROM
издание WHERE 
 "постоянное" = secondCursor;
otr_cursor CURSOR (thirdCursor TEXT) FOR SELECT "шифр отрасли" FROM отрасль 
WHERE 
 отрасль."название" = thirdCursor;
BEGIN

if (doc_name IS null) THEN 
	raise EXCEPTION 'пустой тип? так не пойдет'; 
	return_val := false; END if; 
if (amount IS null) THEN 
	raise EXCEPTION 'пустой тип? так не пойдет'; 
	return_val := false; END if; 
if (_author IS null) THEN 
	raise EXCEPTION 'пустой тип? так не пойдет'; 
	return_val := false; END if; 
if (_izdat IS null) THEN 
	raise EXCEPTION 'пустой тип? так не пойдет'; 
	return_val := false; END if; 
if (_god IS null) THEN 
	raise EXCEPTION 'пустой тип? так не пойдет'; 
	return_val := false; END if; 
	


OPEN tip_cursor (firstCursor :=newtip_name );
FETCH tip_cursor INTO new_tipid;
OPEN izd_cursor (secondCursor := new_izd);
FETCH izd_cursor INTO new_izdid;
OPEN otr_cursor (thirdCursor := newotr_name);
FETCH otr_cursor INTO new_otrid;

if ( new_otrid = -1)
THEN return_val = false;
end IF;
if (new_tipid = -1)
then return_val = false;
end if;
if (new_izdid = -1)
THEN return_val = FALSE;
end if;

if (return_val = true)
THEN
insert INTO документ ("название", "кол-во", "шифр типа",
"шифр издания", "шифр отрасли" ) values (doc_name, amount, new_tipid, new_izdid, new_otrid,  _author, _izdat, _god );
end if;
return return_val;
END; $function$ 




делаю запрос - выходит ошибка:
функция add_doc(unknown, integer, integer, integer, integer, unknown, unknown, integer) не существует
LINE 1: select*from add_doc('ABCdik',7, 7, 4, 15,'','timesnew',1777)
^
HINT: Функция с данными именем и типами аргументов не найдена. Возможно, вам следует добавить явные приведения типов.

с чем это связанно и как исправить?
...
Рейтинг: 0 / 0
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076149
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eva2003
функция add_doc(unknown, integer, integer, integer, integer, unknown, unknown, integer) не существует
Код: sql
1.
LINE 1: select*from add_doc('ABCdik',7, 7, 4, 15,'','timesnew',1777)



Код: sql
1.
CREATE OR REPLACE FUNCTION public.add_doc(doc_name text, amount int,  newtip_name text, new_izd bool, newotr_name text, _author text, _izdat text, _god int )



И т.д. Если создаёте с типом text, значит передавайте текст '7'. Либо наоборот, определите параметр у функции как число. Проверьте остальные параметры.
...
Рейтинг: 0 / 0
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076168
Eva2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

поменяла запрос на:
Код: plsql
1.
select*from add_doc('ABCdik',7, 'studentbook', 1, 'english','И.Ь.Моисеев','timesnew',1777)


ошибка осталась та же
...
Рейтинг: 0 / 0
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076170
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eva2003
VSVLAD,

поменяла запрос на:
Код: plsql
1.
select*from add_doc('ABCdik',7, 'studentbook', 1, 'english','И.Ь.Моисеев','timesnew',1777)


ошибка осталась та же


А зачем вы в bool - integer суете когда надо TRUE/FALSE ?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076176
Eva2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

потому что умом и сообразительностью я не отличаюсь и пишу на sql только второй день. Не знала, что у вас тут всё так строго(
изменила запрос на:
Код: plsql
1.
select*from add_doc('ABCdik',7,'studentbook', true, 'english','И.Ь.Моисеев','timesnew',1777)


стало только хуже :
ERROR: ОШИБКА: нулевое значение в столбце "шифр типа" нарушает ограничение NOT NULL
DETAIL: Ошибочная строка содержит (ABCdik, 7, null, 3, null, И.Ь.Моисеев, timesnew, 1777).
CONTEXT: SQL-оператор: "insert INTO документ ("название", "кол-во", "шифр типа",
"шифр издания", "шифр отрасли", "автор","издат-во","год изд-я" ) values (doc_name, amount, new_tipid, new_izdid, new_otrid, _author, _izdat, _god )"
функция PL/pgSQL add_doc(text,integer,text,boolean,text,text,text,integer), строка 55, оператор SQL-оператор
...
Рейтинг: 0 / 0
Функция с данными именем и типами аргументов не найдена. как исправить?
    #40076189
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И стало не хуже, а лучше. Функция по крайней мере начала исполняться, теперь ошибка вставки в таблицу. Поле "шифр типа" определено как not null, а значение подставляется из переменной new_tipid, которое судя по всему null.

А вообще этот блок не пойдёт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
if ( new_otrid = -1)
THEN return_val = false;
end IF;
if (new_tipid = -1)
then return_val = false;
end if;
if (new_izdid = -1)
THEN return_val = FALSE;
end if;



Если new_otrid и new_tipid будет -1, а new_izdid другое значение, тогда флаг return_val будет TRUE. Хотя технически проверка не пройдена. Вам нужно не
Код: sql
1.
 return_val = FALSE; 


а
Код: sql
1.
return false;


как минимум.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функция с данными именем и типами аргументов не найдена. как исправить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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