Объединение выборок UNION, INTERSECT, MINUS в Oracle (PL/SQL)

В Oracle присутствует возможность объединять выборки. Для объединения используются операторы: UNION (с вариацией UNION ALL), INTERSECT и MINUS. Рассмотрим работу всех этих операторов.

1. UNION и UNION ALL

UNION — объединяет наборы данных, но при этом исключает дублирующие записи, тоесть если у вас в первом и во втором наборе есть одинаковая запись то в результирующем наборе будет только одна такая запись.
UNION ALL — объединяет наборы данных и оставляет дублирующие записи, тоесть если в первом и во втором наборе есть одинаковые записи то в результирующем наборе будут все эти записи.

Для экспериментов, создадим две таблицы и заполним их тестовыми данными.
Читать дальше →

Работа со строками в Oracle (PL/SQL)

Основные способы обработки строковых значений в Oracle.
В этой публикации я приведу основные функции работы со строками которые встречались мне в работе, и будут полезны всем кто работает с Oracle.

CONCAT — Объединяет две строки
SQL> select concat('Пётр ','первый') from dual;
 
CONCAT('ПЁТР','ПЕРВЫЙ')
-----------------------
Пётр первый


Читать дальше →

Как отлавливать ошибки в Oracle (PLSQL) EXCEPTION,SQLERRM,SQLCODE

Маленькое руководство по отлавливанию ошибок в Oracle PLSQL.
Описание как использовать в Oracle (PLSQL) функции SQLERRM и SQLCODE для отлова ошибок EXCEPTION, с описанием синтаксиса и примером.

Функция SQLERRM возвращает сообщение об ошибке связанное с последним возникшим исключением (ошибкой).
Функция SQLERRM — не имеет параметров.

Функция SQLCODE возвращает код ошибки связанный с последним возникшим исключением (ошибкой)
Функция SQLERRM — не имеет параметров.

Обычно обработка исключений EXCEPTION выглядит следующим образом:

EXCEPTION
   WHEN наименование_ошибки_1 THEN
      [statements]

   WHEN наименование_ошибки_2 THEN
      [statements]

   WHEN наименование_ошибки_N THEN
      [statements]

   WHEN OTHERS THEN
      [statements]

END [наименование_процедуры];


Вы можете использовать функции SQLERRM и SQLCODE для вызова сообщения об ошибке например таким образом:
EXCEPTION
   WHEN OTHERS THEN
      raise_application_error(-20001,'Произошла ошибка - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
-- В данном случае появится всплывающее сообщение.


Читать дальше →

Oracle - Фичи и полезности (Часть №1)

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

1. Получаем список всех полей интересующей нас таблицы.
select  column_name 
  from user_tab_columns 
  where upper(table_name) = upper('название_таблицы')


2. Меняем формат даты по умолчанию в сессии.
alter session set NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';
— Пока сессия не закрыта, будет действовать установленный таким образом формат.

Читать дальше →

Oracle - Функции RANK() и DENSE_RANK() (Или учимся выбирать необходимые значения внутри множественной выборки)

Начнем с функции RANK(). С объяснения для чего она и в каких случаях она нам может пригодиться.

Функция RANK() — это очень полезная функция, она позволяет нам пронумеровать набор по некоторому группирующему значению внутри всего выбранного набора данных. Проще всего показать это на примере. Для этого создадим небольшую таблицу:
ID	PERSON	DT			SM

1	Роман	01.10.2016 11:51:31	545.3
2	Роман	01.10.2016 11:51:31	445.2
3	Роман	01.10.2016 11:51:31	145.3
4	Кирил	01.05.2016 16:51:31	99.5
5	Алена	01.07.2016 12:51:31	445.3
6	Роман	01.12.2016 16:51:31	876.1
7	Кирил	01.06.2016 16:51:31	237.22
8	Алена	01.12.2016 16:51:31	145.3
9	Алена	01.02.2016 14:51:31	534.7
10	Роман	01.03.2016 16:51:31	165.3
11	Кирил	01.04.2016 16:51:31	345.2


Пусть в этой таблице будет содержать некоторые выставленные счета разным пользователям PERSON на разные суммы SM в разное время DT.

Читать дальше →

Ресурс посвящённый строкам подключения к БД "Connection Strings"

    Не так давно наткнулся на очень полезный ресурс для всех разработчиков приложений для работы с базами данных, называется ресурс Connection Strings.

    Ресурс представляет собой сборку всевозможных строк подключения к самым различным базам данных с использованием самых разнообразный провайдеров и технологий.

    Ну просто очень полезный ресурс.
    Вот ссылка: http://www.connectionstrings.com
    Ресурс правда на английском, но для тех кому надо это я полагаю не проблема.

Объединение результатов запросов

На днях столкнулся с такой необходимостью — объеденить результаты выборки по двум запросам.
Чуть было не стал делать это программно, но слегка напряг извилины и выяснилось ничего сложного в том чтобы сделать это одним запросом нет.

Итак имеем 2 таблицы:

[Таблица1]
имеет поля: ID, ID_TAB2, NAME, FAMILY

Читать дальше →

Как нельзя использовать SQL запрос в C#

Довольно недавно наткнулся на интересную особенность работы .NET провайдера для Postgres. Возникает эта особенность причём только при выполнении запросов через провайдер, при выполнении аналогичных запросов к базе из командной строки либо через менеджер такого не происходит.

Итак в чём суть:
Предположим нам необходимо найти значение поля NAME где поле ID равно 1. В случае если такое значение существует, то всё хорошо. Если нет — то .NET провайдер создаёт ошибку, вместо того чтобы вернуть Null. Разумеется при довольно большом количестве обращений и таких ошибок — сервер рано или поздно отключает клиента.

Читать дальше →