powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отключение неявного преобразования типов для параметров процедур
5 сообщений из 5, страница 1 из 1
Отключение неявного преобразования типов для параметров процедур
    #39051023
heleo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго.

Собственно поясню САБЖ.

Работа с БД происходит с помощью процедур и представлений.
Заметил, что нерадивые сотрудники решили филонить и не задумываться над тем как передаются параметры в процедуру. Пишут всё параметры процедур в одинарных кавычках как строки (правда это прокатывало до первого NULL :) ).

Грубо говоря:
авторCREATE TABLE test (i int4);

CREATE OR REPLACE FUNCTION f_test(p int4)
RETURNS VOID
AS
$BODY$
BEGIN
INSERT INTO test (i) VALUES (p);
RETURN;
END;
$BODY$
LANGUAGE plpgsql SECURITY DEFINER;

SELECT f_test(100);

SELECT f_test('200');


Собственно возник вопрос, если СУБД сама выполняет неявное преобразование параметров, может есть и способ его отключить? или ещё варианты как пофиксить такой хак для программистов.

PostgreSQL 9.2
...
Рейтинг: 0 / 0
Отключение неявного преобразования типов для параметров процедур
    #39051106
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heleoнерадивые сотрудникиТвои пожелания оформлены как правила разработки, обязательные к ознакомлению и исполнению, или хотя бы как рекомендации? И эти нерадивые ... отказываются выполнять твои старания улучшить сопровождаемую систему, не подают руки и плюют вслед?... Позор им!
...
Рейтинг: 0 / 0
Отключение неявного преобразования типов для параметров процедур
    #39051133
heleo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.heleoнерадивые сотрудникиТвои пожелания оформлены как правила разработки, обязательные к ознакомлению и исполнению, или хотя бы как рекомендации? И эти нерадивые ... отказываются выполнять твои старания улучшить сопровождаемую систему, не подают руки и плюют вслед?... Позор им!

Ни кто не отменял: лень,случайность, а уж тем более пренебрежение к стандартам и правилам.
...
Рейтинг: 0 / 0
Отключение неявного преобразования типов для параметров процедур
    #39051155
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heleo
Собственно возник вопрос, если СУБД сама выполняет неявное преобразование параметров, может есть и способ его отключить? или ещё варианты как пофиксить такой хак для программистов.



Это не неявное преобразование типов... если вы явно объявите типы то получите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mboguk=# SELECT f_test('200'::text);
ERROR:  function f_test(text) does not exist
LINE 1: SELECT f_test('200'::text);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
mboguk=# SELECT f_test('200'::varchar);
ERROR:  function f_test(character varying) does not exist
LINE 1: SELECT f_test('200'::varchar);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
просто '100' - считается валидным входным значением для числа 100.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Отключение неявного преобразования типов для параметров процедур
    #39051165
heleo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukheleoСобственно возник вопрос, если СУБД сама выполняет неявное преобразование параметров, может есть и способ его отключить? или ещё варианты как пофиксить такой хак для программистов.



Это не неявное преобразование типов... если вы явно объявите типы то получите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mboguk=# SELECT f_test('200'::text);
ERROR:  function f_test(text) does not exist
LINE 1: SELECT f_test('200'::text);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
mboguk=# SELECT f_test('200'::varchar);
ERROR:  function f_test(character varying) does not exist
LINE 1: SELECT f_test('200'::varchar);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
просто '100' - считается валидным входным значением для числа 100.

--
Maxim Boguk
www.postgresql-consulting.ru

Ок. Если это не неявное, тогда как правильно такое поведение назвать? Раньше работал со старой версией postgres, и мне сложно найти "то, не знаю что" ))
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отключение неявного преобразования типов для параметров процедур
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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