2311 читали · 7 лет назад
Печеньки от Oracle. Иерархический запрос
В таблице одна строка. Как извлечь из нее 10 строк? Как сформировать последовательность? Календарь? Побочные "плюшки" иерархического SQL запроса в Oracle. Таблица dual Если нам нужно получить SQL запросом текущую дату, то в Oracle мы пишем: select sysdate from dual ; 31.03.19 В некоторых диалектах SQL для скаляра (текущая дата - скаляр) можно записать без from dual, но Oracle требует полноты минимальной конструкции выражения для чтения данных: select <список столбцов> from <список таблиц> Служебная таблица dual как раз и наличествует в системе для формализации выборок "из ниоткуда"...
1111 читали · 3 года назад
Неявные ошибки в SQL запросах
Проверяя работу наших учеников курса "SQL. Базы данных. ORACLE", и даже курса "Программирования в PL/SQL (ORACLE)" иногда встречаю следующее использование функции to_date, которое содержит ошибку. И сейчас напишу почему. Итак, вот конструкция, содержащая ошибку: to_date(sysdate, 'dd.mm.yyyy') Функция to_date служит для преобразования ТЕКСТА в дату согласно указанной маске, а в примере выше функции на вход даётся итак дата (sysdate ведь дата, только ещё и со временем). Во-первых, неразумно из итак...
Как генерить опорные даты в SQL
Бывает нужно для сбора статистики. Генерим даты, потом LEFT JOINом собираем статистику из таблиц. Главное чтобы временный интервалы совпадали. Oracle: Сгенерить по дням за последние 5 дней: SELECT TRUNC(SYSDATE - ROWNUM) DT FROM DUAL CONNECT BY ROWNUM < 5 Сгенерить по часам за последние 5 дней: SELECT...
151 читали · 7 лет назад
Печеньки от Oracle APEX. Представление с контекстным параметром
Дальнейшая автоматизация персональных настроек и фильтрации. В предыдущей заметке мы обсуждали представление с функциональным параметром: в раздел where определения представления было включено сравнение значения столбца с результатом, возвращаемым функцией. Действительно, чтоб получить, например, представление, показывающее только сегодняшние события лога, можно записать create view ... as select ... from ... where ... >= trunc(sysdate) ; Никаких запретов на использование функций sysdate и trunc() в коде представления нет, все будет работать...