Skip to content

Классы данных Python облегчают получение строк из базы данных как объектов

Пересказ статьи Christopher Jones. Python Data Classes make it easy to fetch database rows as objects


rowfactories в Python-oracledb являются мощным средством для запросов к базам данных Oracle, позволяющим изменить представление извлекаемых строк, уменьшить количество шаблонного кода приложения и копирования данных. Здесь мы покажем, как легко использовать класс данных Python с rowfactory для преобразования строк в экземпляры пользовательского класса.

rowfactory - это метод, который вызывается для каждой извлекаемой из базы данных строки перед ее возвращением приложению. Он может применяться к курсору после выполнения оператора и перед извлечением данных.

Рассмотрим код, который не использует rowfactory:
Continue reading "Классы данных Python облегчают получение строк из базы данных как объектов"

Кэширование результата запроса для быстрых приложений баз данных

Пересказ статьи Christopher Jones. Query result caching for fast database applications


Встроенный в базы данных Oracle “Client Result Cache” (CRC) является эффективным, интегрированным, управляемым кэшем, который резко улучшает производительность запросов и существенно снижает нагрузку на базу данных при повторяющихся запросах к по большей части статическим таблицам, таким как почтовые индексы или номера деталей. Никакие изменения в приложениях не требуются. Никакого отдельное промежуточного кэша устанавливать не нужно. CRC доступен для каждого "толстого" клиента, который использует библиотеки Oracle Client, такие как драйверы для Python, Node.js, Go, PHP, Rust, Ruby и Oracle C API. Он также доступен в JDBC. Эта статья демонстрирует пример для Python.

Преимущества кэширования результатов клиента


  • Может использоваться без необходимости изменять код приложения.

  • Улучшенное время отклика запроса.

  • Операторы не посылаются для выполнения в базу данных.

  • Лучшая производительность за счет устранения циклов обмена между серверами.

  • Улучшенная масштабируемость сервера баз данных за счет экономии ресурсов сервера.

  • Автоматически управляемое аннулирование кэша, поддерживающее соответствие кэша изменениям в базе данных.

  • Не требуется сервер промежуточного слоя для кэширования.

  • Разработчикам не требуется создавать или использовать собственный кэш.
Continue reading "Кэширование результата запроса для быстрых приложений баз данных"

Учёт интервалов времени

Автор: Джо Селко (Joe Celko)



SQL — первый язык программирования, в котором появились явные временные типы данных. Я давно полагаю, что если бы в Cobol изначально был тип TIMESTAMP, вся история с Y2K могла бы и не случиться. По крайней мере, сегодня всё больше людей знают о стандартах отображения даты и времени ISO 8601. Кто знает — может быть, их наконец начнут применять.

Continue reading "Учёт интервалов времени"

Разница между CTE и подзапросами в SQL: полноценное руководство для разработчиков

Автор: Vivek Johari Difference Between CTE and Subqueries in SQL: A Complete Guide for Developers


Язык структурированных запросов (SQL) — основа манипулирования и извлечения данных в современных базах. Будь то MySQL, PostgreSQL, SQL Server или Oracle, SQL предоставляет мощные инструменты для эффективной работы с данными. Среди них важнейшую роль в упрощении сложных операций играют Common Table Expressions (CTE) и подзапросы.


Однако многие разработчики — особенно начинающие — задаются вопросом, чем именно отличаются CTE от подзапросов, когда выбирать одно вместо другого и как каждый влияет на читаемость, производительность и сопровождение.


В SQL подзапросы вместе с CTE позволяет разбивать сложную логику на более компактные и управляемые части. Часто достигая одинаковых результатов, они различаются структурой, повторным использованием и пригодностью для разных задач. Выбор подходящего инструмента (CTE или подзапросов) зависит от сложности запроса, необходимости повторного использования и простоты читаемости кода.


Это руководство подробно разбирает разницу между CTE и подзапросами в SQL, с примерами, вариантами применения и советами по оптимизации, которые сделают вас более эффективным SQL‑разработчиком.


Continue reading "Разница между CTE и подзапросами в SQL: полноценное руководство для разработчиков"

Лучшее из двух подходов - реляционного и JSON - одновременно

Пересказ статьи Christopher Jones. The best of Relational and JSON — at the same time


Двойственные представления таблица-JSON в Oracle Database 23ai позволяют хранить данные в виде строк таблицы для получения преимуществ доступа SQL в реляционной модели, в то же время допуская доступ чтения и записи в виде документов JSON для тех же самых данных. Они могут использоваться из таких языков, как Node.js и ODP.NET. В этой статье показывается, как использовать новые представления в Python.

Реляционная модель великолепна: вы можете избегать дублирования данных; гарантируется согласованность данных; вы имеете доступ посредством очень мощного и очень эффективного языка - SQL. Но от разработчиков требуется определить реляционную схему - таблицы, столбцы и типы данных - прежде, чем начать писать код. Не так легко предсказать будущее использование системы, которое может вызывать затруднения для выбранной схемы.

Вот почему вы так любите JSON. Объект JSON может содержать информацию для одного случая использования без необходимости использовать SQL для соединения таблиц. Доступ через простой запрос или единичное обращение к API базы данных. JSON имеет гибкую схему, поэтому, поскольку ваши случаи использования меняются в процессе жизненного цикла системы, вы можете легко модифицировать приложения. Но есть и недостатки: единственная иерархия может подходить лишь нескольким случаям использования. В данных могут оказаться дубликаты, что не только влияет на занимаемое пространство, но делает очень сложным поддержание согласованности. Более трудной становится оптимизация. Поэтому на первый взгляд простая модель может вызывать сложности в долгосрочной перспективе. Continue reading "Лучшее из двух подходов - реляционного и JSON - одновременно"

Эмуляция SQL FILTER с помощью агрегатных функций JSON в Oracle

Пересказ статьи lukaseder. Emulating SQL FILTER with Oracle JSON Aggregate Functions


В стандарте SQL:2003 есть крутая функция - агрегатное предложение FILTER, которое поддерживается естественным образом по крайней мере в этих СУБД:

  • ClickHouse

  • CockroachDB

  • DuckDB

  • Firebird

  • H2

  • HSQLDB

  • PostgreSQL

  • SQLite

  • Trino

  • YugabyteDB

Следующая агрегатная функция вычисляет число строк на группу, которая удовлетворяет предложению FILTER: Continue reading "Эмуляция SQL FILTER с помощью агрегатных функций JSON в Oracle"

Возможности SQL*Plus в Oracle Database 23ai

Пересказ статьи Christopher Jones. Powering on with SQL*Plus for Oracle Database 23ai


При фантастических заявлениях относительно возможностей Oracle Database 23ai, которые уже в целом доступны, я захотел поделиться некоторыми улучшениями в SQL*Plus 23ai.

Традиционный инструмент командной строки в Oracle SQL*Plus остается привычным для многих пользователей баз данных Oracle. Он позволяет выполнять ad-hoc операторы SQL к базе данных Oracle или создавать скрипты операторов для выполнения. Инструмент включается во все установки ПО базы данных и легко устанавливается на других машинах с помощью небольших свободно распространяемых пакетов ZIP (или RPM) Oracle Instant Client. Никаких переходов по ссылкам, никакого длительного времени выполнения. Вы просто распаковываете архив, устанавливаете PATH или LD_LIBRARY_PATH и начинаете его использовать. (Инструкции по установке на Linux находятся здесь.)

Continue reading "Возможности SQL*Plus в Oracle Database 23ai"

Преобразование Oracle PL/SQL в PostgreSQL PL/pgSQL

Пересказ статьи Bitnine Global. Converting Oracle PL/SQL to PostgreSQL PL/pgSQL


Добро пожаловать в мир программирования баз данных, в котором языки Oracle PL/SQL и PostgreSQL PL/pgSQL помогают привнести структуру и логику в данные. Эти процедурные языки являются основой внедрения бизнес-правил и манипуляции данными в сами базы данных, играя важную роль в администрировании баз данных.

Оба языка предоставляют возможность использовать переменные, операторы управления типа IF, CASE и LOOP, а также управлять исключениями - инструменты, необходимые для адаптивных и динамичных процедур работы с базами данных. Когда бы вы ни создавали новые функции или выполняли сложные процедуры, синтаксис CREATE PROCEDURE и CREATE FUNCTION станет частью вашего стандартного инструментария.

По мере того, как мы погружаемся в процесс преобразования из Oracle PL/SQL в PostgreSQL PL/pgSQL, мы будем открывать важные детали, необходимые для гладкого перехода.
Continue reading "Преобразование Oracle PL/SQL в PostgreSQL PL/pgSQL"

GROUP BY алиас - особенность Oracle, которая была бы замечательна в SQL Server

Пересказ статьи Aaron Bertrand. SQL GROUP BY Alias - An Oracle feature that would be great in SQL Server


Запросы с GROUP BY могут стать слишком путаными, если столбцом группировки является сложное выражение. В силу логического порядка обработки запроса вам часто приходится повторять такое выражение, поскольку его алиас не может быть использован в предложении GROUP BY.

Oracle недавно решил эту проблему в выпуске 23c, добавив возможность группировки GROUP BY алиас_столбца. Это такой простой, но мощный синтаксис, и я надеюсь, что SQL Server может последовать за Oracle.
Continue reading "GROUP BY алиас - особенность Oracle, которая была бы замечательна в SQL Server"

Предложение With Function в Oracle SQL

Пересказ статьи Martien van den Akker. Oracle SQL With Function clause


Оно существует уже давно: предложение WITH в Oracle SQL. И, действительно, я использовал его в прошлом. Предложение WITH весьма полезно для модуляризации вашего SQL, особенно в представлениях.

Первое время его использования, у меня был случай, когда я не знал, как решить задачу без предложения WITH. Это было до того времени (в районе 2018), когда я заставил себя познакомиться с ANSI-SQL. Так или иначе, я полюбил предложение WITH, поэтому использовал его также в случаях, когда оно не было необходимо. Но выглядело это изящно. И это модулизировало мои запросы. Continue reading "Предложение With Function в Oracle SQL"

Генерация тестовых данных с помощью встроенных возможностей базы данных

Пересказ статьи Denis Magda. Sample Data Generation With Built-In Database Capabilities


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

В этой статье вы узнаете, как использовать специальные функции базы данных, иерархические запросы и рекурсивные общие табличные выражения (CTE) для генерации тестового набора данных в PostgreSQL, MySQL, Oracle и SQL Server.
Continue reading "Генерация тестовых данных с помощью встроенных возможностей базы данных"

REGEX в SQL

Пересказ статьи Sai Krishna. REGEX IN SQL


В своих запросах SQL вы, вероятно, использовали предложение WHERE для фильтрации конкретного текста, выполняя поиск на точное совпадение. Например, вы могли бы использовать запрос типа “SELECT * FROM EMP WHERE name = 'Alex'”. Этот подход возвращает записи, которые точно соответствуют имени Alex в том же регистре. Однако имеется более универсальный способ обработки сложных текстовых шаблонов, использующих регулярные выражения (regex).
Continue reading "REGEX в SQL"

Nidhi Gupta. DECODE vs CASE IN ORACLE

Пересказ статьи Nidhi Gupta. DECODE vs CASE IN ORACLE


DECODE: Decode - это функция в SQL. Это способ преобразования написанного кода в понимаемый язык.

CASE: Case - это оператор в SQL. Это способ реагирования на появление значения или на то, какое действие необходимо выполнить при появлении определенного значения.
Continue reading "Nidhi Gupta. DECODE vs CASE IN ORACLE"

Понимание предложения ROWS BETWEEN в SQL

Пересказ статьи Rahma Hassan. Understanding the “ROWS BETWEEN” Clause in SQL


В SQL предложение “ROWS BETWEEN” является мощным средством, которое позволяет вам определить окно строк для анализа или вычислений непосредственно в запросе. Указывая диапазон строк, вы можете выполнять вычисления или применять агрегатные функции к подмножеству данных, а не ко всему результирующему набору. Цель данной статьи - сделать понятным предложение “ROWS BETWEEN” и его использование на примерах.
Continue reading "Понимание предложения ROWS BETWEEN в SQL"

NULL в Oracle

Пересказ статьи Andrei Rogalenko. NULL in Oracle


Ключевые моменты


Специальное значение NULL означает отсутствие данных, утверждение того факта, что значение неизвестно. По умолчанию столбцы и переменные любого типа могут принимать это значение, если они не имеют ограничения NOT NULL. Помимо этого, СУБД автоматически добавляет ограничение NOT NULL для столбцов, входящих в первичный ключ таблицы.

Главная особенность NULL состоит в том, что оно ничему не равно, даже другому NULL. Вы не можете сравнивать с ним любое значение с помощью операторов: =, <, >, like ... Даже выражение NULL != NULL не будет истинным, поскольку нельзя однозначно сравнивать одно неизвестное значение с другим. К слову, это выражение не будет и ложным (false), т.к. при вычислении условий Oracle не ограничивается состояниями TRUE и FALSE. Благодаря наличию элемента неопределенности в виде NULL, имеется еще одно состояние - UNKNOWN.
Continue reading "NULL в Oracle"