Найти в Дзене
NOT IN - парадоксальный результат
Коллеги обратились с вопросом: "Почему NOT IN" не дает выборки, хотя она быть должна?? Рассмотрим тестовый пример: select level as x from dual connect by level <= 5 ; 1 2 3 4 5 select level as y from dual connect by level <= 3 ; 1 2 3 -- получили две последовательности натуральных чисел, все хорошо. Сделаем NOT IN: with s as (select level as x from dual connect by level <= 5), d as (select level as y from dual connect by level <= 3) select * from s where x not in (select y from d) ; 4 5 -- абсолютно очевидно; ожидаемый результат. Добавим пустое значение: with s as (select level as x from dual...
10 месяцев назад
Сплайн-аппроксимация низкими порядками полинома
Возможно ли получить аппроксимацию псевдо-сплайнами на иных базах данных, нежели Oracle Database? Это третья заметка цикла, посвященного псевдо-сплайн аппроксимации зашумленных данных в рамках сервера баз данных. Повторим вновь и вновь: база данных - это не просто таблицы, а весь цикл обработки данных. Первая заметка, "Визуализация тренда с помощью псевдо-сплайна и Oracle APEX", рассматривает постановку задачи и обзор ее решения. Вторая заметка, "Под капотом кубической сплайн-аппроксимации", показывает довольно сложные внутренние решения...
11 месяцев назад
Под капотом кубической сплайн-аппроксимации
Кубическая аппроксимация по методу наименьших квадратов реализуется в Oracle не совсем тривиально. В предыдущей статье мы обсудили сплайн-аппроксимацию кусочными гиперболами - полиномами 3-го порядка. Мы рассуждали о скользящем окне аппроксимации, но не вдавались в подробности собственно кубической аппроксимации, оценки коэффициентов ak полинома y = a0 + a1 * x + a2 * x * x + a3 * x * x * x. Матричную математику по этому вопросу заинтересованный читатель легко найдет по ключевой фразе "полиномиальная аппроксимация методом наименьших квадратов"; мы же сосредоточимся на ее воплощении средствами Oracle Database...
11 месяцев назад
Визуализация тренда с помощью псевдо-сплайна и Oracle APEX
Зашумленные исходные данные имеют тренд, тренд достаточно сложный. Для его восстановления нужна сплайн-аппроксимация. Можно проще. Исходные данные представляют собой объективно зарегистрированные факты некоторого процесса, испытывающего как (1) закономерные медленные изменения, так и (2) случайные воздействия в каждой точке фиксации факта. Назовем (1) трендом (или трендами), (2) шумом. Задачей аппроксимации является нахождение функции, наилучшим образом отражающей тренд(ы) и максимально подавляющей шум...
11 месяцев назад
RISBANK и Oracle APEX
Технология быстрой компонентной сборки информационных систем RISBANK была создана в России в конце 1990х годов, средство быстрой разработки Web приложений Oracle APEX появилось в 2004 году. Между этими двумя подходами есть много общего, но есть и существенные различия. Мы попробуем вспомнить, как все это было. Говоря про RISBANK, я должен упомянуть имя Нины Рубиной, вклад которой в развитие и идеи, и технологии составляет 50%. Это соответствует действительности, закреплено соответствующим соглашением и является для меня приятным воспоминанием. Также я должен упомянуть, что большинство событий...
1 год назад
Падающий FTP сервер
Внешний сервер Oracle собирает некоторую информацию и должен по расписанию отправить данные на FTP сервер в главном офисе - а он, этот FTP сервер, периодически падает. Что делать? Изначально был некий процесс по cron'у, который в час X запускал FTP процесс. Если передача была успешной, отправлялось письмо с отчетом; если соединение с FTP сервером не устанавливалось, то отправлялось письмо с уведомлением об ошибке FTP. Потом стало понятно, что за доступностью FTP сервера стоит следить постоянно, записывать в базу интервалы простоя и, вероятно, отправлять письма о начале и завершении инцидента. Что и было сделано...
1 год назад
Детская олимпиада по информатике
Организаторы школьной олимпиады по информатике борются со списыванием и исключают работы с совпадающими ответами. Мы попробуем показать, что это ведет к исключению лучших работ. Вообще говоря, тот факт, что лучшие работы олимпиады с выбором правильного ответа из нескольких предложенных будут неизбежно совпадать, очевиден, но попробуем это доказать. Создадим таблицу вопросов: create table oly_quests (id number primary key, quest varchar2(400)) ; select * from oly_quests ; 1 Вопрос 1 2 Вопрос 2 Создадим таблицу ответов - олимпиада в стиле "выберите правильный ответ": create table oly_answs (id number...
1 год назад
Как дальше жить?
Моя теща по первому браку, царствие небесное, говаривала: "Будет совсем плохо - уйдем на землю, земля прокормит". Я с семьей закончил 4-ю зиму в садовом домике и могу ответственно заявить: стандартный городской житель на земле не выживет. Как и в лесу. Партизанить в Карелии хлопотно. Дело в том, что жизнь на природе требует не просто специальных навыков, а принципиально иного отношения к жизни. Ну, например: Если вам надо завтра поехать в офис, то сегодня вам надо вымыться. На дворе реальный минус и центрального водоснабжения нет. Правильно: вам надо загодя (вы не один такой) заказать доставку воды, а для этого надо прочистить дорогу от снега, иначе "газелька" с водой тупо не проедет...
1 год назад
Рекурсивный lag() в SQL запросе
Классический SQL не допускает межстрочного взаимодействия; аналитические функции это ограничение снимают; конструкция model дает еще большую свободу действий. Возникла задача вида $z = 1; for ($i = 0; $i < 10; $i++) { $z = $z * $z + 1; } Т.е. необходимо обращаться к предыдущему значению переменной z; возникло желание записать на SQL. "На языке"-то просто, но это 3-й уровень абстракции, а как на SQL, который является 4-м уровнем абстракции и специфицирует не действия, как 3-й, а желаемые результаты? Вообще говоря, это вопрос философский. Сначала человек думает: "Я хочу примерно этого" - и махом формирует алгоритм, (c) Лев Толстой: Die erste Kolonne marschiert, die zweite Kolonne marschiert...
1 год назад
Производительность визуализации в Oracle APEX
Создание такой графической страницы заняло примерно 30 минут: Такое быстрое решение основывается на нескольких предположениях и технологических ухищрениях: Я против такого подхода при коммерческом производстве...
1 год назад
Управление сортировкой с помощью параметра
Возник вопрос: можно ли управлять порядком сортировки (asc/desc) при помощи параметра из прикладного приложения? Типа order by x :direction. Ответ - да!, но не совсем так. Признаюсь сразу: решение не мое, а команды Тома Кайта; то ли Крис, то ли Коннор - но я разобрался и немного переформулировал. В первом приближении, конструкция вида order by x :direction корректной не является, но, как говорится, мы поняли, что нужно заказчику. Вначале, как всегда, запишем генератор данных: select level as x from dual connect by level <= 5 ; 1 2 3 4 5 Запишем прямую сортировку: with t as ( select level as x from...
1 год назад
Форматирование чисел для калькулятора с текстом
Задан текст, в который включены арифметические выражения. Выражения следует вычислить, а результаты округлить для читабельности. Эта задача - часть более сложной задачи формирования микроотчетов, задаваемых пользователем в виде текста с вкраплениями некоторых условных конструкций. Здесь мы рассмотрим задачу в предположении, что заданная пользователем строка уже переведена на привычный Ораклу язык. Рассмотрим пример. '''Число пи примерно равно 3.1415926. Одна треть - это один разделить на три, т.е. '' || 1 / 3 || '', а минус четыре трети - это уже целых '' || -4 / 3 || ''.'''' Число пи примерно равно 3...
3 года назад