четверг, 9 марта 2017 г.

(изучить) Что-то новое в SQL

select id, dispstatus_id, doc_number, doc_date
from document where id in (
select min(id) from (select level, id, dispstatus_id, doc_number, doc_date, parent_id, connect_by_root id as root
from document
where documentclass_id = 244
start with parent_id is null
connect by nocycle prior id = parent_id) t
where t.dispstatus_id in (28,33)
group by t.root
having count(*)>1
)
;

Чтобы понять, что такое рекурсивные запросы, нужно понять, что такое рекурсивные запросы.

Понятия:
- Корень - нет родителя, есть потомки;
- Ветвь - есть родитель, есть потомки;
- Лист - есть родителя, нет потомков.

среда, 1 марта 2017 г.

"Database link" для Oracle

/* Создание дблинка.
Запрос предназначен для выполнения под пользователем с привилегиями DBA на стороне сервера, на котором находится БД-приемник.
Перед использованием необходимо заменить шаблонные значения на собственные, требуемые для подключения к БД-источнику.
1. <Имя схемы БД-источника>;
2. <Пароль схемы БД-источника>;
3. <IP-адрес СУБД со схемой БД-источника>;
4. <Порт СУБД со схемой БД-источника>;
5. <SID экземпляра СУБД со схемой БД-источника>;
*/
CREATE PUBLIC DATABASE LINK mydblink1
CONNECT TO <Имя схемы БД-источника>
IDENTIFIED BY "<Пароль схемы БД-источника>"
USING '<IP-адрес СУБД со схемой БД-источника>:<Порт СУБД со схемой БД-источника>/<SID экземпляра СУБД со схемой БД-источника>';


/* Запрос предназначен для выполнения под пользователем схемы БД-приемника.
Пример связки двух таблиц: одна из БД-источника, другая - БД-источника (обращение к ее таблице записывается в формате <имя табицы>@<имя дблинка>.
*/
select *
from PARTNERS@mydblink1 p
join ORDERS o on o.PARTNER_ID = p.ID;

/* Удаление дблинка */
drop public database link mydblink1;

Архив