Игнорирование возвращаемого значения функции PL / SQL - PullRequest
1 голос
/ 05 ноября 2019

Иногда я вызываю функцию PL / SQL для получения и обработки возвращаемого значения. В других случаях я хотел бы вызывать ту же функцию только для ее побочных эффектов.

Например, рассмотрим функцию ведения журнала, которая записывает свои аргументы в таблицу и впоследствии возвращает отформатированную строку, созданную из тех же аргументов. Иногда я хотел бы использовать возвращаемое значение, например, для отображения его пользователю, в других случаях я просто вызываю функцию для записи в таблицу и игнорирую возвращаемое значение. В последнем случае я бы хотел избежать объявления переменной для хранения возвращаемого значения и написать оператор присваивания.

Этот вопрос касается темы, и ответ, по-видимому, таков:вызывающая сторона должна использовать значение, возвращаемое функцией, будь то с помощью оператора присваивания или select into.

Есть ли способ вызвать функцию в PL / SQL и отбросить возвращенное значение?

1 Ответ

6 голосов
/ 05 ноября 2019

присвоение переменной, а затем ничего не делать с ней - это запах кода

Если мы говорим о запахах кода, иметь функцию, которая изменяет состояние базы данных, немного странно. Соглашение состоит в том, что процедуры изменяют состояние, а функции только читают состояние.

Итак, в качестве примера вы можете реализовать свою функцию ведения журнала как две перегруженные процедуры в пакете средства ведения журнала.

procedure log_this(p1_in number, p2 in timestamp, p_fmt_txt out varchar2);

procedure log_this(p1_in number, p2 in timestamp);

В теле пакета вторая процедура просто вызывает первую процедуру иглотает параметр out.

Теперь вы можете вызывать соответствующую процедуру, в зависимости от того, хотите ли вы увидеть отформатированную строку.

Конечно, это решение не будет работать, если вы хотите вызвать свою функцию в операторе SELECT, но изменение состояния базы данных посредством запроса действительно является запахом кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...