Oracle Developer👨🏻‍💻
3.22K subscribers
609 photos
68 videos
2 files
487 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Этапы собеседования
1️⃣ предварительное общение с HR в телеграме;
2️⃣ общение с руководителем;
3️⃣ техническое собеседование;
4️⃣ регистрация в их спец платформе для кандидатов;
5️⃣ проверка безопасниками;
6️⃣ оффер или неееет.

С первым этапом - никаких проблем.

Второй этап занял почти 1.5ч. На нем были руководитель + еще несколько спецов. Общались на разные темы от проектирования приложений, различий между монолитами/ микросервисами и заканчивая Agile. По самой СУБД вопросов, практически, не было.

Также, обсуждали организационные моменты, проект, задачи, которыми предстоит заниматься. Отдельно остановились на ЦФТшном PL/Plus - был ли опыт (упаси боже) и готов ли изучать (ну, конечно, да 😂).

Кратко по работе:
Бизнес область: кредитование.

Два технических стрима:
1️⃣ монолит с ЦФТ на Oracle - это хозяйство нужно вялотекуще поддерживать. Нужны компетенции в Oracle + PL/Plus.

2️⃣ перевод, всего чего только можно, на микросервисы на Java-стеке. Нужны, хотя бы, базовые знания Java и около того. Готовы обучать.
Второй стрим в самом начале - будет шанс поучаствовать на старте всего проекта.

Продолжение в четверг

#собеседование #сбер
👍15
продолжение ⬇️
Собеседование в Сбер.ДомКлик. Финал

Мы остановились на втором этапе - общении с руководителем.

По окончании сессии, мне сказали, что этап с тех собеседованием не потребуется.
Насколько это частая история? Не знаю. Кто туда недавно собесился - напишите плиз в чатике.

Поэтому сорян, технических задачек со Сбера не будет. Обломали меня со свежим материалом 🤷🏻‍♂️

Далее, не интересные этапы с регистрацией в Сбер HR-платформе «Пульс», заполнения 100500 страниц анкеты и проверка безопасниками.

В итоге: был получен оффер на позицию «Главный инженер по разработке».

Из плюсов
🔹 Можно очень сильно прокачаться в другом стеке.
🔹 Высокая з/п - с учетом всех плюшек, премий и т.п. в месяц набегает довольно приличная сумма по нынешним временам. И это только на входе.
🔹 Жирный соц пакет.

Из минусов
🔸 PL/Plus
🔸 Офис/гибрид в Москве
🔸 Кому-то не зайдет работодатель.

Наверняка, все слышали страшилки про Сбер, когда человек мог просидеть три месяца без работы заполняя заявки, и только к концу испытательного срока получить всё необходимое для работы.
HR клятвенно заверила, что такого больше нет 🤷🏻‍♂️

Однако, я был приятно удивлен оперативности всех цепочек от HR до ЛПР. Прошло всего три недели (с учетом НГ праздников) от первого касания до оффера.
Для Сбера, я считаю, это огромный прогресс.

На всех этапах потенциальные коллеги были максимально вежливы и проявляли профессионализм.

В целом, эта вакансия - отличная возможность перекатиться из Oracle в Java-мир, если не смущают минусы.

Вот такая история получилась в этот раз 😊

#собеседование #сбер
🔥22👍16🤯1
Восстанавливаем текст запроса

Друзья всем привет!

Недавно был на собеседовании в одной из компаний. Об этом я обязательно расскажу позже 😉
Гоняли долго по разным темам. Все тщательно записал и сохранил 😁

В том числе, было такое задание: по плану запроса необходимо восстановить текст запроса.
В исходном задании он был сложней. Я его чутка упростил, чтоб совсем не было треша.

Задание направлено на понимание планов запросов, когда какие операции используются и т.п. Этакий reverse engineering.

В моем курсе по оптимизации, будем разбирать подобные задачи для усвоения материала и натаскивания на собеседования

Анализ
, как всегда, в четверг 🎓
Обсудить в нашем ламповом чатике.

#задача
Oracle Developer
👍303🔥3
Восстанавливаем текст запроса. Анализ

Последовательность выполнения шагов: 3, 2, 4, 1, 0 или 3, 2, 1, 4, 0 (как посмотреть на соединение).

1️⃣ Шаг 3. Происходит Range Scan индекса DEPT_LOCATION_IX.
Доступ происходит по предикату "D"."LOCATION_ID">1700 (звездочка в плане + predicate information)

2️⃣ Шаг 2. Выгребание строк по найденным Rowid (на шаге 3) из таблицы DEPARTMENTS
Почему без него никак? В индексе нет достаточного количества данных, чтобы выполнить последующее соединение и материализовать результат.

3️⃣ Шаг 4. NESTED LOOPS SEMI - полусоединение двух таблиц (ищется первое совпадение по предикатам соединения).
Используется в конструкциях типа exists/in.
Исходя из predicate information 4, соединение двух таблиц осуществляется по столбцам "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID".
Отсюда же можно получить названия алиасов к таблицам - d/e.

4️⃣ Шаг 1. Доступ ко второй таблицы происходит по EMP_DEPARTMENT_IX.

5️⃣ Шаг 0. Происходит SELECT.

По этим данным никак нельзя понять название второй таблицы. Тут уж просто кругозор 🤷🏻‍♂️
Только ленивый или совсем новичок не щупал схему HR с набором табличек.
Название второй таблички - employees.
Даже, если не знаете, я думаю ничего страшного, если на собесе её назовете, хоть, tab2.

Итоговый запрос
select *
from hr.departments d
where d.location_id > 1700
and exists (select 1 from hr.employees e where d.department_id = e.department_id);

Минутка юмора
Подписчица канала, и мой экс-босс (Наташа, привет), прогнала задание через BingAI и получила текст запроса идентичный натуральному. Есть над чем задуматься 😉
Конечно, на собеседовании у вас не будет времени на это. Да и в работе, лучше понимать "что куда и как".

В своем курсе по оптимизации, я буду давать подобные темы 🎓

Понравилось? ставьте 👍

#решениезадачи #оптимизация
Oracle Developer
👍25🔥21🎉1
Релиз Oracle 23c

Друзья всем привет!

Еще в сентябре прошлого года, компания Oracle анонсировала выход новой версии СУБД зимой 23 года.
Версия LTS (long term support), а значит она с нами на продолжительное время.
И вот, 03.04 состоялся релиз новой версии 23с Free - Developer Release.

В новой версии заявлено достаточно много интересных фич. Некоторые из них:
1️⃣ Select без from
было: select 1+2 from dual;
стало: select 1+2;

2️⃣ Использование алиасов в Group by и Having
select trunc(dtime, ‘dd’) day
from tab
group by day

3️⃣ Тип boolean в SQL
create table client(
id number(38),
is_active boolean
);
insert into client values(1, true);
insert into client values(2, false);

И многие другие фишки, которые уже давно надо было добавить. Наконец-то, подумали о разработчиках 🥰

А вот смогут/захотят на неё переходить компании в РФ, вопрос хороший, как раз для нашего лампового чатика.

В следующем посте расскажу, как эту версию развернуть в Docker 🐳 и потестить новые фичи 😉

#oracle23c
Oracle Developer
👍34🔥61
Установка Oracle 23c в Docker

Есть три варианта:
🔸 Docker-образ;
🔸 RPM-пакет для *nix;
🔸 Виртуалка для VirtualBox.

Мне нравится вариант с Docker.

1️⃣ Устанавливаем Docker в нашу ОС (если нет)
Win Mac Linux

2️⃣ Создаем контейнер с указанием параметров
docker run -d --name oracle23c -p 1524:1521 -e ORACLE_PWD=booble34 -e ORACLE_CHARACTERSET=UTF8 container-registry.oracle.com/database/free:latest

вместо latest можно указать конкретную версию 23.2.0.0.
имя контейнера - oracle23c, порт доступа - 1524, пароль для sys/system - booble34.

Если у вас еще нет скаченного image, то процесс займет некоторое время - нужно получить ~3Gb.

3️⃣ Устанавливаем Oracle client (если нет) и настраиваем network\admin\tnsnames.ora
Добавляете в файл алиас на новую БД.
oradb23c =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1524))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREEPDB1)
)
)

FREEPDB1 - БД, созданная по умолчанию.

Всё 🔥

Внутрь контейнера можно попасть через
docker exec -it oracle23c /bin/bash

К БД можно подключиться
sqlplus system/booble34@oradb23c  

Для Mac/*nix почти тоже самое.

А что по опциям в этом дистрибутиве?
Выполняем и смотрим:
select * from v$option;
Много чего есть. Например: секционирование.

Обсудить в чатике 💬

PS. Параметров создания БД гораздо больше, можно настроить очень гибко.
По умолчанию, удаленное подключение (не с сервера) к SYS + пароль не доступно (не важно как вы устанавливаете БД). Для настройки нужно выполнять доп. приседания.

#docker #oracle23c
Oracle Developer
👍16
Использование алиасов в Group by и Having

Друзья, всем привет!

В Oracle23c, наконец-то, сделали возможность использование алиаса в group by и having.
Это бывает полезно, когда выражение, по которому происходит группировка и фильтрация групп размашистое.

-- до 23c
select extract(year from t.hire_date) year, count(*)
from employees t
group by extract(year from t.hire_date)
having extract(year from t.hire_date) >= 2014;

-- 23с
select extract(year from t.hire_date) year, count(*)
from employees t
group by year
having year >= 2014;

Красота 🔥

Иногда на собесах спрашивают: можно ли использовать алиасы в group by?
Теперь правильный ответ: зависит от версии, до 23 - нельзя, после - можно.

А можно ли обратиться по позиции?
Да можно, но только в group by и с включением этой возможности в сесиии.

alter session set group_by_position_enabled = true;

select extract(year from t.hire_date) year, count(*)
from employees t
group by 1
having year >= 2014;

Обсудить в чатике 💬

#oracle23c
Oracle Developer
👍43🔥3
Условие if exists в create/drop

Друзья, всем привет!

Продолжаем про фишки Oracle23c. В синтаксис создания и удаления, добавили условие if [not] exists. На скринах примеры выполнения.

До 23с повторные вызовы команд create/delete вызывали ошибку. Сейчас мы её можем заглушить. Конечно, нужно использовать её с осторожностью. Вполне вероятно, что вы как раз хотите получить ошибку при выполнении DDL. Однако, найдутся кейсы, где это будет очень полезно.

-- До 23c
create table my_tab(
id number(38)
);

drop table my_tab;

-- 23c
create table if not exists my_tab(
id number(38)
);

drop table if exists my_tab;

К слову сказать, в PostgreSQL эти опции доступны с версии 8.2 (2006й год) 😉

Обсудить в чатике 💬

#oracle23c
Oracle Developer
🔥16👍7🤯2
Собеседование в MagnIT

Друзья, всем привет!

Решил последовать примеру автора канала и сделать пост на тему технического собеседования в Magnit Tech.

Неделю назад, сидя на удаленке в ожидании доступов на один банковский проект, увидел вакансию на позицию Middle/Senior DWH разработчик в Магнит и решил разнообразить ожидание собеседованием в самый большой ритейл в мире (по количеству торговых точек, разумеется).
Реакция HR не заставила долго ждать.

О вакансии
Экосистема КХД включает в себя:
▫️Хранилище Teradata(450 Tb);
▫️Exadata — ODS;
▫️Hadoop для хранения холодных данных;
▫️Informatica PC/DEI в качестве ETL-инструмента.

Основные задачи:
1️⃣ Поддерживать текущее решение на Oracle и Teradata;
2️⃣ Принимать участие в миграции на облачные решения Yandex Cloud Platform на базе Greenplum и Hadoop. Возможно, что-то еще.

Проект по миграции планируется на 3 года.

Плюшки
В лучшем случае, ДМС и курсы + возможность работать как в Москве, так и удалено.

Про з/п
Старт от 200к net. Запрашивал 300к net. Готовы обсуждать, тут многое зависит от вас.

Этапы собеседований
1️⃣
Предварительное общение с HR
Про опыт и мотивацию. Было пару входных тестовых вопросов. Отличная практика - дает примерное представление о об уровне требований работодателя и подготовки соискателя.

Продолжительность интервью - 30 минут.

2️⃣ Интервью
Состав из 4 человек:
▫️ Руководитель направления DWH развития;
▫️ Senior DE инженер;
▫️ DWH аналитик-разработчик;
▫️ HR специалист.
Формат интервью:
▫️ Знакомство;
▫️ Теоретическое собеседование;
▫️ Написание запросов;
▫️ Вопросы от соискателя.

Продолжительность интервью - 1.5 часа.

3️⃣ Оффер

Продолжение следует...

Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍14
Magnit Tech. Экспресс-вопросы (скрининг) от HR

К
сожалению, не все вопросы записал, т.к. идея написать пост родилась позже, а некоторые вопросы к тому времени были уже забыты 🤷🏻‍♂️

1️⃣ Какие виды Join вы знаете?

2️⃣ Какие аналитические функции вы использовали?

3️⃣ Что такое и для чего нужен undo/redo?

4️⃣ Какие виды индексов знаете? В каких случаях используется индексный доступ данных?

5️⃣ Что хранится в блоках b-tree индекса?

6️⃣ Какие виды физического соединения таблиц знаете? В каких системах какой вид соединения используется?

7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.

8️⃣ Что делать с фрагментированной таблицей?

Разбор вопросов в четверг 🎓

Обсудить в чатике 💬

Автор: @Rus5553
#задача
Oracle Developer
👍175
Magnit Tech. Экспресс-вопросы от HR. Ответы

Список вопросов: см. в посте вторника.

Ответы:
1️⃣ Виды Join
Inner, Equi, Self, Semi, Outer(left, right, full), Cross, Anti

2️⃣ Аналитические функции
Row_number, rank, dense_rank, lead, lag и т.д.
Весь перечень аналитических функций можно найти в
документации.

3️⃣ Что такое undo/redo? Для чего нужны?

Undo - сегмент отката транзакций. В момент совершения транзакции Oracle старые записи вычитывает и хранит в табличном пространство Undo. Новые данные пишутся в Buffer cache. Такой механизм позволяет сделать откат (rollback) транзакции, а также параллельным сессиям читать только зафиксированные транзакции, не дожидаясь фиксации текущей транзакции.

Redo logs - журналы повторного выполнения, по сути, основа процесса восстановления, благодаря которым Oracle гарантирует восстановление изменений пользователя на случая сбоя.

Ссылки на документацию: undo, redo.

4️⃣ Виды индексов

По физической организации можно выделить:
▫️b-tree;
▫️bitmap;
▫️пользовательские индексы;
▫️кластерные индексы.

По типу:
▫️обычные индексы по полям без модификаций;
▫️функциональные индексы;
▫️индексы с сортировкой;
▫️локальные и глобальные индексы;
▫️реверсивные.

Индексный доступ используется для чтения небольших объемов данных из большой таблицы. Примерно, 1-5% от общего объема.

5️⃣ Что хранится в блоках b-tree индекса?

В блоках b-tree индекса хранятся поля, по которым строился индекс, а также rowid. Детали в документации.

6️⃣ Виды физического соединения таблиц:
▫️nested Loops;
▫️merge join;
▫️hash join.

Используются в следующих случаях:
▫️Для OLTP характерен Nested Loops с использованием индексного доступа (unique, range scan).
▫️Для DSS/DWH/OLAP, чаще всего, используется полное сканирование таблиц. При полном сканировании данных - merge и hash join эффективней.

Об алгоритмах физического соединения таблиц можно прочитать
здесь.

7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.

Truncate, DDL команда, в основном используется для чистки всей таблицы или секции таблицы. В отличии от команды Delete, Truncate сбрасывает HWM.

8️⃣ Что делать с фрагментированной таблицей?

Фрагментированная таблица - таблица с пустыми блоками данных.
Есть четыре способа дефрагментации таблиц(сброс HWM):
▫️alter table + move;
▫️export / truncate / import;
▫️create table as select (CTAS);
▫️dbms_redefinition.


Напомню, это вопросы со скриниг-интервью от HR.
Главная его задача, попасть в те ответы, которые есть у HR в чеклисте. Не нужно вступать в научные дискуссии и учить уму разуму бедную девушку 😊

На следующей недели опубликуем вопросы/ответы с технического собеседования, впечатления и результат 😉

Автор: @Rus5553
#решениезадачи #magnit
Oracle Developer
🔥33👍217
Техническое собеседование в MagnIT

Формат общения - онлайн, звонок в Teams.

Список тем:

1️⃣ Оптимизация запросов
Способы определения узких мест в запросах, ключевые метрики/статистики в планах выполнения запросов. Что означает кардинальность = 1? Как обновить статистику и какой хинт может использоваться?

2️⃣ Физические виды соединения таблиц
Алгоритм каждого соединения, особенности применения и механизм работы hash join.

3️⃣ Виды индексного доступа
Особенности применения b-tree и bitmap индексов. Что отобразиться в плане при join 2х таблиц, у одной из которых по столбцам соединения отсутствуют индексы? Особенности применения index fast full scan и index full scan, а также механизм сканирования листовых блоков.

4️⃣ Секционирование
Что логически и физически представляет объект после секционирования? Виды и опции, практические кейсы применения. В какую секцию при вставке данных определится NULL при list секционировании? Практики создания секций. Есть ли возможность автоматизировать создание секций в момент вставки данных? Практики и особенности работы DML операциий на секционированных таблицах с глобальным и локальным индексом/индексами?

5️⃣ Compaction сегмента
Как бороться с фрагментацией сегмента?

6️⃣ Хинты
Best practice из личного опыта по хинтам. Как работает хинт append?

7️⃣ Undo tablespace
Что такое undo и принцип его работы. В каких случаях может возникнуть ошибка snapshot too old? Способы решения этой проблемы.

⚠️ Также были две задачи на 10-15 мин. в общей сложности. К сожалению, детали условий задач не запомнил.

Разбор как всегда в четверг 🎓

Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍381
Коллеги, всем привет!

К сожалению, объем ответов на вопросы получился сильно больше, чем 1 пост (аж 4 поста). Поэтому мы решили вынести их в отдельную статью. Автор @Rus5553

Многие вопросы, так или иначе, уже обсуждались в канале.
Руслан, спасибо за труд 👍

Кстати говоря, не рекламы ради, а справедливости для.
Руслан занимался у меня с 2021 года по индивидуальной программе - архитектура, SQL, PL/SQL, unit-тестирование. Посещал мои курсы - секционирование, PL/SQL Основы. Сейчас самый первый проходит курс по Оптимизации (эксклюзив так сказать), дает мне обратную связь.

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

И у меня тоже есть свой ментор, только в другой области ИТ ☺️ Менторство - очень эффективный инструмент.

В следующем посте будет окончание истории про MagnIT 😉

#собеседование #magnit
Oracle Developer
🔥21👍81
Итоги собеседования в MagnIT

Оффер я так и не получил 😊

HR 💬 "На интервью показали достаточно высокий уровень в части теории, но в практической части были допущены ошибки. Мы видим потенциал и хотели бы договориться еще об одной встрече, чтобы продолжить практическую часть по sql."

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

От проведения еще одного 1.5 часового интервью я отказался.

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

В целом процесс взаимодействия с HR был приятным и эффективным. Все прозрачно и адекватно.
Остались неприятные впечатления относительно самого интервью, больше похоже на допрос, чем на беседу:
1️⃣ Неэффективное распределение времени на каждом из этапов интервью, пропустили секцию со знакомством и сразу перешли к технической части.
2️⃣ Спустя 1ч 10 мин. перешли к практике, еще через 10 мин. пришлось тактично прервать и напомнить, что и у меня есть вопросы.
3️⃣ В 50% вопросах невнятная формулировка.

Справедливости ради отмечу и плюсы
1️⃣ Компетентные собеседующие и интересные вопросы уровня middle (это субъективно).
2️⃣ Собеседование проходило в уважительной и мягкой форме.
3️⃣ Действительно большие объемы данных, возможность погрузиться в предметную область и поработать на широком стеке технологий (РСУБД, BIG DATA), поучаствовать в проекте миграции большого хранилища.

Выводы/Рекомендации
1️⃣ Уточнять у HR обо всех этапах заранее
Вы рассчитывали на одно большое интервью(знакомство, тех. вопросы и вопросы от вас), а вам предлагают еще несколько этапов. Может возникнуть негатив относительного самого процесса.

2️⃣ Иногда нужно "показать зубы"
Поможет избежать попыток дать ответ на вопрос с непонятной формулировкой. Главное без фанатизма, ключевое слово иногда, все должно быть в рамках корпоративной культуры. Soft skills - это 50 % успеха.

3️⃣ Не иметь завышенных ожиданий относительно Soft Skills собеседующих
Нужно понимать, что IT все же не сфера специалистов с высоким уровнем коммуникаций. Специалисты в основном ориентированы на технику, чем на ведение переговоров.

⚠️ Не факт, что у вас будут те же впечатления от собеседования в Магнит. Это субъективно. Дерзайте!

А какие у вас были положительные и негативные впечатления после собеседования? Обсудить в чатике 🫂

Палец вверх, если зашло 👍

Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍662
Устранение рудимента - таблички DUAL

Друзья, всем привет!

Продолжаем про фишки Oracle23c. Наконец-то, можно не использовать табличку DUAL для получения результата.

-- До 23c
select 1 from dual;

declare
v_var number;
begin
select 1 into v_var from dual;
dbms_output.put_line(v_var);
end;
/

-- 23c
select 1;

declare
v_var number;
begin
select 1 into v_var;
dbms_output.put_line(v_var);
end;
/

Естественно, обратная совместимость сохранена. Старый код будет работать.
К слову сказать, во многих СУБД так было изначально 😉

Обсудить в чатике 💬

#oracle23c
Oracle Developer
👍27🔥11
Вопросы по БД на Java-собеседованиях

Всем привет!

Некоторое время назад решил походить по собесам на Java-разработчика. Накопилось очень много материала про это 😊
Но в рамках, нашего канала, хотел бы рассказать, а чего у джавистов спрашивают про БД.

Прежде всего, зависит от позиции, какие обязанности там нужно выполнять. Если это какая-то миграция или поддержка и развитие легаси с Oracle, то будут вопросы связанные с Oracle. На одном из собесов, 50% времени задавали сеньорские вопросы по Oracle (это исключение). По умолчанию - подразумевается PostgreSQL.

В основной массе собесов, дают решать простенькие SQL-запросы и гоняют по теории на уровне junior/middle.

Из запомнившейся теории:
🔸 что такое транзакция, ACID, уровни изоляции;
🔸 что такое блокировки, виды;
🔸 как устроен B-tree индекс;
🔸 как задизайнить отношение “многие ко многим”;
🔸 CAP-теорема;
🔸 шардирование и секционирование, в чем разница.

SQL запросы:
заджойнить пару-тройку таблиц, используя group by/having. Никакой аналитики.
А-ля "найди всех клиентов, у которых более трех заказов".
Подобные задачки часто публикуются в ТГ-каналах для начинающих.

Иногда спрашивают про NoSQL БД и отличия от РСУБД. Заданий а-ля "напиши запрос для MongoDB" не дают.

Выводы
С уверенностью можно сказать, нагоняющая ужас секция по БД на многих Java-разработчиков, будет пройдена легко, если вы опытный DBD или, хотя бы, прочитаете этот канал с начала 😂 Все вопросы, так или иначе, были уже рассмотрены.

Стоит отметить, что секция с SQL/БД занимает, по ощущениям, 0-10% от собеса. К вопросу, о простоте смены специализации 😊

Если пост наберет, хотя бы, 200 🔥 расскажу про собесы на Java-разраба, этапы и т.п. Канал, все-таки, про СУБД Oracle, не всем может быть интересно 😉

Обсудить в чатике 💬

#собеседование #java
Oracle Developer
🔥202👍5
Сиквенсы на сессию

Сиквенс - это объект, используемый для генерации уникальных числовых значений. Чаще всего, используется для генерации значений primary key. Реализация в разных СУБД может быть разная, где-то скрыто от пользователя, где-то явно.

В 12.1 появилась опция Session (см скрин). По умолчанию сиквенсы создаются с опцией Global. В чем различие?

– Создается по умолчанию - global
create sequence my_seq;

– С инкрементом только в рамках сессии
create sequence my_seq session;

Cиквенс, с опцией Session, хранит значение только в рамках сессии. Проще говоря, в двух разных сессиях первый вызов nextval отдаст “1”. C global это будут разные значения.

Вполне может быть удобно при совместном использовании с global temporary table или когда нужен некий ID только внутри сессии и др. Пытливый ум найдет применение 😉

Как попробовать
-- Обратиться в разных сессиях
select my_seq.nextval from dual;

Cбросить последовательность (с 18с)
alter sequence my_seq restart;

Обсудить в чатике 💬

#sequence
Oracle Developer
👍21