Я работаю над старым SQL, написанным для Oracle. Есть часть предложения select, которую я не понимаю, даже после поиска в Google и проверки вопросов, связанных со знаком + с ключевыми словами Oracle и SQL.
Я проверил ответ на аналогичный вопрос для предложения where здесь, а также нашел документы Oracle для соединения, но это не имеет смысла для предложения select.
Учитывая SQL ниже, какова цель знака плюс.
select '01,'||
lpad(
(select nvl(count(*), 0) from table1)
+
(select nvl(count(*), 0) from table2)
+
(select nvl(count(*), 0) from table3)
,9,'0')
from DUAL
Образец вывода
01,000011111
Из примера вывода sql кажется, что он предназначен для объединения результата, но я хочу быть уверенным.
+
не для конкатенации строк. Это для доп. Кроме того, count()
не возвращает значения NULL
, поэтому nvl()
не требуется.
Это должно быть эквивалентно:
select ('01,' ||
lpad( ((select count(*) from table1) +
(select count(*) from table2) +
(select count(*) from table3)
), 9, '0'
)
)
from DUAL
@Rovshen: оператор +
является стандартным оператором в SQL для добавления чисел. Почему вы думаете, что это будет что-то "особенное". Какой оператор, по вашему мнению, будет отвечать за добавление номеров?
Хороший вопрос, мне не нужно было делать арифметику в операторе выбора. Спасибо за подтверждение!
Я думаю, что он запутался с нотацией внешнего соединения, отличной от ISO, которая необязательно используется Oracle, которая также использует оператор +
Ровшен, согласен с Гордоном. Код объединяет «01» с отформатированной суммой счетчиков из трех таблиц. LPAD равен нулю, заполняя суммарное числовое значение до 9 цифр. "||" является символом конкатенации в Oracle, хотя есть и функция конкатенации. Он используется редко.
Спасибо, Марк, спасибо за объяснение остальной части sql, мне пришлось искать LPAD.
Не могли бы вы также сообщить мне, является ли этот оператор + в предложении select специфичным для оракула?