rowfactories в Python-oracledb являются мощным средством для запросов к базам данных Oracle, позволяющим изменить представление извлекаемых строк, уменьшить количество шаблонного кода приложения и копирования данных. Здесь мы покажем, как легко использовать класс данных Python с rowfactory для преобразования строк в экземпляры пользовательского класса.
rowfactory - это метод, который вызывается для каждой извлекаемой из базы данных строки перед ее возвращением приложению. Он может применяться к курсору после выполнения оператора и перед извлечением данных.
Встроенный в базы данных Oracle “Client Result Cache” (CRC) является эффективным, интегрированным, управляемым кэшем, который резко улучшает производительность запросов и существенно снижает нагрузку на базу данных при повторяющихся запросах к по большей части статическим таблицам, таким как почтовые индексы или номера деталей. Никакие изменения в приложениях не требуются. Никакого отдельное промежуточного кэша устанавливать не нужно. CRC доступен для каждого "толстого" клиента, который использует библиотеки Oracle Client, такие как драйверы для Python, Node.js, Go, PHP, Rust, Ruby и Oracle C API. Он также доступен в JDBC. Эта статья демонстрирует пример для Python.
Преимущества кэширования результатов клиента
Может использоваться без необходимости изменять код приложения.
Улучшенное время отклика запроса.
Операторы не посылаются для выполнения в базу данных.
Лучшая производительность за счет устранения циклов обмена между серверами.
Улучшенная масштабируемость сервера баз данных за счет экономии ресурсов сервера.
Автоматически управляемое аннулирование кэша, поддерживающее соответствие кэша изменениям в базе данных.
Не требуется сервер промежуточного слоя для кэширования.
Разработчикам не требуется создавать или использовать собственный кэш.
SQL — первый язык программирования, в котором появились явные временные типы данных. Я давно полагаю, что если бы в Cobol изначально был тип TIMESTAMP, вся история с Y2K могла бы и не случиться. По крайней мере, сегодня всё больше людей знают о стандартах отображения даты и времени ISO 8601. Кто знает — может быть, их наконец начнут применять.
Язык структурированных запросов (SQL) — основа манипулирования и извлечения данных в современных базах. Будь то MySQL, PostgreSQL, SQL Server или Oracle, SQL предоставляет мощные инструменты для эффективной работы с данными. Среди них важнейшую роль в упрощении сложных операций играют Common Table Expressions (CTE) и подзапросы.
Однако многие разработчики — особенно начинающие — задаются вопросом, чем именно отличаются CTE от подзапросов, когда выбирать одно вместо другого и как каждый влияет на читаемость, производительность и сопровождение.
В SQL подзапросы вместе с CTE позволяет разбивать сложную логику на более компактные и управляемые части. Часто достигая одинаковых результатов, они различаются структурой, повторным использованием и пригодностью для разных задач. Выбор подходящего инструмента (CTE или подзапросов) зависит от сложности запроса, необходимости повторного использования и простоты читаемости кода.
Это руководство подробно разбирает разницу между CTE и подзапросами в SQL, с примерами, вариантами применения и советами по оптимизации, которые сделают вас более эффективным SQL‑разработчиком.
Двойственные представления таблица-JSON в Oracle Database 23ai позволяют хранить данные в виде строк таблицы для получения преимуществ доступа SQL в реляционной модели, в то же время допуская доступ чтения и записи в виде документов JSON для тех же самых данных. Они могут использоваться из таких языков, как Node.js и ODP.NET. В этой статье показывается, как использовать новые представления в Python.
Реляционная модель великолепна: вы можете избегать дублирования данных; гарантируется согласованность данных; вы имеете доступ посредством очень мощного и очень эффективного языка - SQL. Но от разработчиков требуется определить реляционную схему - таблицы, столбцы и типы данных - прежде, чем начать писать код. Не так легко предсказать будущее использование системы, которое может вызывать затруднения для выбранной схемы.
Вот почему вы так любите JSON. Объект JSON может содержать информацию для одного случая использования без необходимости использовать SQL для соединения таблиц. Доступ через простой запрос или единичное обращение к API базы данных. JSON имеет гибкую схему, поэтому, поскольку ваши случаи использования меняются в процессе жизненного цикла системы, вы можете легко модифицировать приложения. Но есть и недостатки: единственная иерархия может подходить лишь нескольким случаям использования. В данных могут оказаться дубликаты, что не только влияет на занимаемое пространство, но делает очень сложным поддержание согласованности. Более трудной становится оптимизация. Поэтому на первый взгляд простая модель может вызывать сложности в долгосрочной перспективе.
Continue reading "Лучшее из двух подходов - реляционного и JSON - одновременно"
При фантастических заявлениях относительно возможностей Oracle Database 23ai, которые уже в целом доступны, я захотел поделиться некоторыми улучшениями в SQL*Plus 23ai.
Традиционный инструмент командной строки в Oracle SQL*Plus остается привычным для многих пользователей баз данных Oracle. Он позволяет выполнять ad-hoc операторы SQL к базе данных Oracle или создавать скрипты операторов для выполнения. Инструмент включается во все установки ПО базы данных и легко устанавливается на других машинах с помощью небольших свободно распространяемых пакетов ZIP (или RPM) Oracle Instant Client. Никаких переходов по ссылкам, никакого длительного времени выполнения. Вы просто распаковываете архив, устанавливаете PATH или LD_LIBRARY_PATH и начинаете его использовать. (Инструкции по установке на Linux находятся здесь.)
Добро пожаловать в мир программирования баз данных, в котором языки Oracle PL/SQL и PostgreSQL PL/pgSQL помогают привнести структуру и логику в данные. Эти процедурные языки являются основой внедрения бизнес-правил и манипуляции данными в сами базы данных, играя важную роль в администрировании баз данных.
Оба языка предоставляют возможность использовать переменные, операторы управления типа IF, CASE и LOOP, а также управлять исключениями - инструменты, необходимые для адаптивных и динамичных процедур работы с базами данных. Когда бы вы ни создавали новые функции или выполняли сложные процедуры, синтаксис CREATE PROCEDURE и CREATE FUNCTION станет частью вашего стандартного инструментария.
Запросы с GROUP BY могут стать слишком путаными, если столбцом группировки является сложное выражение. В силу логического порядка обработки запроса вам часто приходится повторять такое выражение, поскольку его алиас не может быть использован в предложении GROUP BY.
Оно существует уже давно: предложение WITH в Oracle SQL. И, действительно, я использовал его в прошлом. Предложение WITH весьма полезно для модуляризации вашего SQL, особенно в представлениях.
Первое время его использования, у меня был случай, когда я не знал, как решить задачу без предложения WITH. Это было до того времени (в районе 2018), когда я заставил себя познакомиться с ANSI-SQL. Так или иначе, я полюбил предложение WITH, поэтому использовал его также в случаях, когда оно не было необходимо. Но выглядело это изящно. И это модулизировало мои запросы.
Continue reading "Предложение With Function в Oracle SQL"
Имеется много способов генерации фиктивных данных для базы данных. Вы можете создать генератор данных, используя Mock-сервисы для тестирования, или получить подмножество собственных производственных данных. Помимо этого многие базы данных предлагают встроенные возможности для создания синтетических данных.
В своих запросах SQL вы, вероятно, использовали предложение WHERE для фильтрации конкретного текста, выполняя поиск на точное совпадение. Например, вы могли бы использовать запрос типа “SELECT * FROM EMP WHERE name = 'Alex'”. Этот подход возвращает записи, которые точно соответствуют имени Alex в том же регистре. Однако имеется более универсальный способ обработки сложных текстовых шаблонов, использующих регулярные выражения (regex). Continue reading "REGEX в SQL"
В SQL предложение “ROWS BETWEEN” является мощным средством, которое позволяет вам определить окно строк для анализа или вычислений непосредственно в запросе. Указывая диапазон строк, вы можете выполнять вычисления или применять агрегатные функции к подмножеству данных, а не ко всему результирующему набору. Цель данной статьи - сделать понятным предложение “ROWS BETWEEN” и его использование на примерах. Continue reading "Понимание предложения ROWS BETWEEN в SQL"
Специальное значение NULL означает отсутствие данных, утверждение того факта, что значение неизвестно. По умолчанию столбцы и переменные любого типа могут принимать это значение, если они не имеют ограничения NOT NULL. Помимо этого, СУБД автоматически добавляет ограничение NOT NULL для столбцов, входящих в первичный ключ таблицы.
Главная особенность NULL состоит в том, что оно ничему не равно, даже другому NULL. Вы не можете сравнивать с ним любое значение с помощью операторов: =, <, >, like ... Даже выражение NULL != NULL не будет истинным, поскольку нельзя однозначно сравнивать одно неизвестное значение с другим. К слову, это выражение не будет и ложным (false), т.к. при вычислении условий Oracle не ограничивается состояниями TRUE и FALSE. Благодаря наличию элемента неопределенности в виде NULL, имеется еще одно состояние - UNKNOWN. Continue reading "NULL в Oracle"