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

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

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Релиз 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
Установка 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
Использование алиасов в 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
Условие 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
Устранение рудимента - таблички 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
🌐 Навигация по темам канала Oracle Developer

📘 Основы
#sql #plsql #теория #архитектура
#функции #секционирование #временныетаблицы
#транзакции #исключения #курсоры
#аналитическиефункции #иерархическиезапросы
#системныепредставления #компиляция #представления #коллекции #циклы

🛠 Практика и задачи
#задача #решениезадачи #asktom

🚀 Оптимизация и производительность
#оптимизация #nestedloops #индекс

🧩 Инструменты и технологии
#тестирование #postgresql #oracle #docker #oracle23c #ide #ai

💼 Карьера и Развитие
#карьера #собеседование #hr #тинькофф #magnit #вкусноиточка #leroymerlin#сбер #яндекс #Эффективность #КарьерныйРост #Denis_Kivillev #Работа

🎓 Дополнительные материалы
#видео #подкаст #аудиоподкаст #конкурс #марафон #юмор


В почти 700 (!) постах не мудрено заплутать. Поэтому решил сделать подобие навигации 😉
Не забывайте пользоваться обычным поиском, я не добавил сюда низкочастотные хештеги
.

Канал Oracle Developer | Чатик💬