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

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

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Коллеги, всем спасибо за участие!

Получилось долго, но надеюсь продуктивно 😉
Запись вебинара обязательно залью.

Пожалуйста, дайте обратную связь, мне это важно 🤝

Материалы
🔹 презентация по Unit-тестам
🔹 код с объектам и примером юнит-тестов
🔸 п
ромо-страница курса Oracle PL/SQL
🔸 отзывы студентов об обучении
🔸 написать мне в личку
👍52
Ribbon vs Classic Menu в PL/SQL Developer

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

Иногда замечаю у коллег, студентов огромное меню панели инструментов в PL/SQL Developer’e. Ввели его с 10й что ли версии.
На мой взгляд, занимает пол экрана. Полезная площадь бесполезно расходуется 😱

Переключиться на классическое компактное меню можно в настройках.
Configure -> Preferences -> Appearance -> мотаем до конца окна и выбираем Switch to Menu.

💡 Больше места - больше пространства для кода - удобней работать.

#ide
Oracle Developer
👍31🔥6👎2🤩1
Standard SQL Functions Cheat Sheet

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

Случайно попалась шпаргалка по SQL. На мой взгляд, довольно концентрированная информация с графическими иллюстрациями. Для junior, middle, вполне себе, отличное подспорье.

Шпаргалочка не совсем прям 100% про Oracle. С ходу нашел некоторые отличия.
🔹 тип Date не хранит время (в Oracle хранит);
🔹 наличие - Named Window Definition (в Oracle отсутствует).
🔹 возможно, что-то еще.
Можем устроить мини-соревнование в чатике - "кто найдет больше всего несоответствий между SQL и Oracle SQL" 😁

Сохраняйте, отправляйте коллегам 😉

Oracle Developer
👍14🔥1
Друзья, всем привет!

На прошлой недели, для канала, проходил собес в одну из компаний. Позже расскажу - что куда и как😉

Помимо всех прочих вопросов про оптимизацию, секционирование, кэширование и архитектуру построения приложений были вопросы про коллекции и курсоры.

💬 Интервьювер: какой best-practice по применению курсоров? Какие виды коллекций и кейсы применения? Как передавать данные между разными модулями и слоями приложения?

Что вы ответите? Если в голове возникает сумбурная картинка, то не удивляйтесь, что собеседование вы можете не пройти

Однако, это "база". Эти темы мы проходим в курсе основы PL/SQL, разбираем множество примеров с коллекциями и курсорами, применяем их на практике.
У кого до сих пор в голове путница, я рекомендую посетить 3х месячный курс по PL/SQL.

Даже те ребята, которые программируют не первый год, находят для себя много нового 😉
Помимо синтаксиса мы еще затрагиваем темы:
🔹 чистый код, именования, форматирование;
🔹best-практисы в компаниях;
🔹архитектуру приложений и многие другие.

С 12.01 по 31.03 пройдет очередной поток. Места еще есть, но их немного. Продажи закроются 23:59 31.12.
В любые времена вложения в свое здоровье и образование было отличной идеей 👌
Время тикает, не упустите шанс 😉🔥

PS. Кстати, если будет желание при отличной успеваемости смогу рекомендовать вас HR из Qiwi, кто знает, вдруг вы станете частью Qiwi-семьи 😉

Ссылки
🔸 Промо-страница курса
🔸 Оплатить участие в курсе
🔸 Оплатить участие в курсе (в рассрочку)
🔸 Три урока бесплатно
🔸 Плей-лист с демо-уроками
👍8
Друзья всем привет!

Это уже третий новый год, с которым я поздравляю вас в нашем канале 🥳

Что сказать про уходящий 22й? Вы и без меня все знаете… Лично мои планы на обучающие программы были полностью нарушены. Новых видео на канале практически не было. Предыдущие года были более продуктивными с точки зрения контента. Как-то не располагала обстановка к творчеству 🤦🏻‍♂️

Конечно, хочется, чтобы 2023 был другим. Более позитивным и эффективным.
Моя главная задача на следующий год - добить курс по Основам оптимизации SQL. Половина уже написана, половина осталась. Надеюсь сделаю, если опять не случится какая-нибудь непредвиденная дичь.
Плюс, пилить контент для вас, мои дорогие 😁 Спасибо, что остаетесь на канале 🤝

От себя хочу пожелать - здоровья, счастья и успехов во всех делах, развиваться, быть здоровой клеткой. Берегите себя и своих близких. Мирного неба над головой 🕊

С наступающим 2️⃣0️⃣2️⃣3️⃣ годом! 🎄

Создатель канала Oracle Developer, Кивилёв Денис
👍45🎉1210🔥3
Видео с вебинара

Друзья всем привет!
Ну что? как вам в 2023м? 😁

К сожалению, в конце прошлого года я приболел и не успел выложить видео с вебинара “Пишем свой framework для Unit-тестирования на PL/SQL”.
Выполняю обещание.

Вебинар вместо одного часа получился аж на два.
🔸30 минут ушло на теорию тестирования и примеры;
🔸1 час на написание простенького фреймворка для тестирования;
🔸остальное на различные вопросы-ответы, в том числе про сертификацию и курс PL/SQL.
В видео есть тайминги, поэтому будет проще ориентироваться.

Спасибо кто оставил обратную связь 👍 подкинули некоторые темы на будущие вебинары.

Пользуясь случаем, скажу, что осталось 1️⃣ место на поток по Oracle PL/SQL, который стартанет 12.01. Если хотите попасть - пишите мне в личку.

Всем приятного просмотра 🎥

#webinar #видео #подкаст #utplsql #тестирование
Oracle Developer
👍12🔥1
Инструкция создания Oracle XE в Docker

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

Установка Oracle на ваш ПК (не сервер) с дистрибутива это уже совсем позавчерашний день.
Современная парадигма - контейнеризация. Docker - один из представителей.
Можно развернуть что угодно в контейнере, не затрагивая вашу главную ОС.

Я уже делал видосы по установке Oracle в Docker (раз, два, три). К сожалению, для тех кто с РФ эти способы немного устарели.

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

Готовые собранные контейнеры - https://hub.docker.com/r/gvenzl/oracle-xe

Они же используются для тестирования с использованием testcontainers (джавистам на заметку).

Доступны - 11, 18, 21 версии. Начиная с 18й версии редакция XE обладает всеми опциями, что и Enterprise Edition (EE). Так что её хватит сполна.

Продолжение ⬇️
👍61
Краткая инструкция (для Windows):
1️⃣ Устанавливаете Docker в вашу ОС.
https://docs.docker.com/desktop/install/windows-install/

2️⃣ Скачиваете image с нужной версией Oracle.
Версию выбираете на страничке проекта.
Выполняете в командной строке:
docker pull gvenzl/oracle-xe:21.3.0

Скорость скачивания зависит от вашего интернета.

3️⃣ Создаете контейнер из image с указанием параметров
Например:
docker run --name oradb21xe -d -p 1523:1521 -e ORACLE_PASSWORD=booble34 gvenzl/oracle-xe:21.3.0

имя контейнера oradb21xe, порт доступа - 1523, пароль для sys/system - booble34

Контейнер создастся практически мгновенно.

4️⃣ Скачиваете Oracle client и настраиваете network\admin\tnsnames.ora
Добавляете в него алиас на новую БД.
oradb21xe =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1523))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xepdb1)
)
)

Всё 🔥

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

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

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

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

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

#docker #oraclexe
Oracle Developer
👍311
Друзья всем привет!

Объявляю эту неделю - неделей знакомства с PostgreSQL. Одной из главных альтернатив Oracle на международном и российском рынке, в частности. Ведь PostgreSQL версии Pro прошла сертификацию ФСТЭК и внесена в реестр отечественного ПО.

Рано или поздно вы столкнетесь с этой СУБД, если еще не.

продолжение ⬇️
👍15🔥2
Немного истории

PostgreSQL был создан в 1986 году в Университете Массачусетса в Бостоне. Он вырос из проекта POSTGRES, который затем был переименован в СУБД PostgreSQL.
В начале 1990-х годов PostgreSQL стал открытым исходным программным обеспечением. С тех пор PostgreSQL набрала значительную популярность среди СУБД. Достаточно взглянуть на тренды.
Одним из главных контрибьютеров открытого комьюнити был и есть Олег Бартунов 🇷🇺. Олег часто участвует в конференциях, на Youtube есть множество докладов.

В 2015 году он и его коллеги стали развивать платную версию - Postgres Pro (Professional), которая имеет дополнительные фишки (автономные транзакции, секционирование из коробки и др), а также тех поддержку.
Да, эта та самая СУБД в реестре отечественного ПО.

Их же компания пишет отличную документацию на русском и создает обучающие курсы.

Фишки из платных версий Pg постепенно перетекают в бесплатную версию.

продолжение ⬇️

#postgresql
Oracle Developer
👍11
Возможности СУБД

PostgreSQL это мощная объектно-реляционная СУБД, которая предлагает широкий спектр функциональности, включая:

1️⃣ Поддержка ACID (Atomicity, Consistency, Isolation, Durability) транзакций для обеспечения целостности данных.

2️⃣ Поддержка хранения и управления данными в различных форматах, таких как JSON, XML и др.

3️⃣ Расширенные возможности аналитики и агрегации, включая поддержку оконных функций, группирования и анализа данных.

4️⃣ Репликация и высокая доступность, включая поддержку резервного копирования, асинхронной репликации и репликации с нескольких источников.

5️⃣ Механизмы управления безопасностью, включая поддержку ролей, прав доступа и контроля доступа к данным.

6️⃣ Расширенные возможности индексирования и оптимизации запросов, включая поддержку различных типов индексов, таких как B-Tree, Hash, GIN и др.

7️⃣ Поддержку языков программирования и расширений, таких как PL/pgSQL, PL/Tcl, PL/Perl и др.

8️⃣ Открытый исходный код и активную комьюнити, которая разрабатывает и улучшает функциональность.

9️⃣ Огромные возможности для расширения функциональности с помощью сторонних модулей и плагинов.

🔟 Производительность, надежность и масштабируемость, которые делают ее подходящей для решения широкого спектра задач в небольших и крупных организациях.

Конечно, в любом ПО есть свои плюсы и минусы.
—-

Завтра я расскажу, как можно развернуть PG локально в пару команд 😉

#postgresql
Oracle Developer
👍17
Инструкция создания БД PostgreSQL в Docker

Создание БД в Docker - отличный способ быстро приступить к экспериментам. Процесс элементарный.

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

2️⃣ Запускаем контейнер с 14-й версией
docker run -p 5434:5432 --name mypgdb14 -e POSTGRES_PASSWORD=mypass -d postgres:14

mypgdb14 - название pg-кластера
mypass - пароль
5434:5432 - проброс стандартного порта на 5434
postgres:14 - версия Pg

Если у вас еще нет образа (image) c postgres:14, то он будет скачан. Время запуска зависит от вашей скорости интернета. Последующие создания контейнеров будут занимать пару секунд.

3️⃣ Проверяем, что контейнер запущен
docker ps

4️⃣ Подключаемся к консоли
docker exec -it mypgdb14 psql -U postgres

Всё, теперь можно эксплуатировать контейнер в хвост и гриву.

⚠️ СУБД поднимается в самой минимальной конфигурации.

Продолжение завтра 😉

#docker #postgresql
Oracle Developer
👍253🤩1
Земля вызывает базу

Ок. СУБД поставили, что дальше?
Надо бы как то начать управлять этим богатством. Какие есть варианты?

1️⃣ Командная утилита psql
Аналог sqlplus в мире Oracle.

Доступна в установленном контейнере. Подключиться можно командой:
docker exec -it mypgdb14 psql -U postgres

docker exec -it mypgdb14 - эта часть относится к docker
psql -U postgres - эта к утилите psql. -U к какому юзеру подключаемся.

2️⃣ IDE с человеческим интерфейсом
Их достаточное количество на любой вкус и цвет.
DBeaver, DataGrip, PgAdmin4 и другие.

На скрине показано окно настроек подключения в DBeaver.
▫️Server: localhost
▫️Dbname: postgres
▫️Port: 5434 (указывали при создании)
▫️User: postgres
▫️Pass: mypass (указывали при создании)

Ввели креды, протестировали. Все должно быть ок

Завтра продолжим 😉

#postgresql #ide
Oracle Developer
👍17🔥1
К серверу подключились. Что дальше?

Сервер БД (кластер) может содержать несколько БД. Близкая аналогия с Oracle - это набор PDB. По умолчанию создается БД postgres, а также шаблонная БД (template).

Можем создать БД владельцем, которой будет пользователь postgres. Мы пойдем другим путем. Создадим владельца будущей базы. А потом уже БД с указанием владельца.

1️⃣ Создаем пользователя:
create role mydb_owner login password 'mypass';
или
create user mydb_owner password 'mypass';

А причем тут роль? Да, в мире PG роль может быть как пользователем, так и ролью.
Юзер/роль создается общая на весь кластер.

2️⃣ Создаем отдельную БД
create database mydb owner mydb_owner;

БД создали. Где будем хранить объекты? В схеме.
В Oracle при создании пользователя, автоматически создается схема. В Pg это нужно делать отдельно. По умолчанию создается схема public.

3️⃣ Создаем схему
create schema my_schema;

Не обязательно использовать psql, достаточно использовать IDE 😇

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

#postgresql
Oracle Developer
👍24
Создаем объекты

Начнем с таблиц. Синтаксис PG чуть более богат чем Oracle (до 23й версии). Можем использовать if exists/not exists.

drop table if exists my_tab;

create table if not exists my_tab
(
id bigserial constraint my_tab_pk primary key,
d date not null,
t time not null,
note text
);

🔸 bigserial - большое целое с автоувеличением (похож на generated always as identity в Oracle);
🔸 date - только дата;
🔸 time - только время;
🔸 text - строка неограниченной переменной длины (рекомендован к применению; похож на clob в Oracle).

Добавим несколько строк:
insert into my_tab(d, t, note) values
(now(), now(), 'text 1'),
(now(), now(), 'text 2');

insert into my_tab values
(default, now(), now(), 'text 3'),
(default, now(), now(), 'text 4');

🔸 now() - аналог sysdate.
🔸 default - есть в Oracle.

Заметьте, как элегантно можно вставить N строк в одном операторе. Это будет представлено только в Oracle 23. На текущий момент, придется написать аж четыре команды.

#postgresql
Oracle Developer
👍22
Пишем код на PL/pgSQL

PL/pgSQL - это процедурный язык для СУБД PostgreSQL. Аналог в Oracle - PL/SQL.

Он издалека похож на PL/SQL со своим синтаксисом и особенностями. К слову, о миграции с Oracle на PG, нельзя просто взять и портировать код с PL/SQL на PL/pgSQL.
Лично меня сильно расстраивает отсутствие пакетов. Можно выкрутиться путем создания схем (как будто это пакет), но по мне так, это не то пальто.

Это хорошо показывает разницу в подходах использования СУБД.

Не принято писать в PG те жирные приложения, которые мы привыкли создавать в Oracle. В основном, PG идет в паре с middleware (java, python,…), в котором, как раз, содержится вся бизнес-логика. БД используется лишь для хранения данных. В некоторых случаях, с небольшим налетом кода для технических нужд (например, нарезание секций, чистка таблиц и т.п.).

Продолжение ⬇️
👍10
Ок. Давайте напишем первую функцию на PL/pgSQL.
Функция будет возвращать строку в Uppercase + выводить в буфер вывода информацию о входной и выходной строках (просто для примера).

Код функции:
CREATE OR REPLACE FUNCTION my_schema.my_upper(p_text text)
RETURNS text
LANGUAGE plpgsql
immutable
AS $function$
declare
v_out text;
begin
v_out := upper(p_text);
raise notice 'In: %. Out: %', p_text, v_out;
return v_out;
end;
$function$;

Примечание: код можно написать лаконичней.

Согласитесь есть что-то общее с PL/SQL, но не 1 в 1.

🔸 LANGUAGE plpgsql - язык кода на PL/pgSQL (может быть Sql, Python и др).
🔸 RAISE NOTICE ~ dbms_output
🔸 immutable = deterministic

В синтаксисе создания модулей можно наворотить многое. Ссылка на доку под постом.

Вызов функции:
select my_upper('my text');

Обратите внимание на вызов. Никакого from dual нет. Кстати, после выхода Oracle 23, мы так же будем избавлены от этого рудимента (кто перейдет 😁)

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

#postgresql #plpgsql
Oracle Developer
👍22🤯1
Система прав и привилегий 🔐

Да, она отличается от Oracle.
Как минимум бросается в глаза выдача грантов на объекты.
Рассмотрим на простом примере.

1️⃣ Создадим функцию, которая использует внутри себя таблицу my_tab (пару постов назад мы её создавали и наполняли).

create or replace function get_note(p_id my_tab.id%type)
returns my_tab.note %type as $$
select note from my_tab t where t.id = p_id;
$$ language sql;

2️⃣ Создадим еще одного юзера в нашей БД
create user mydb_app password 'apppass';

3️⃣ Попробуем выполнить функцию под новым пользователем
select my_schema.getNote(1);

ERROR: permission denied for schema my_schema
LINE 1: select my_schema.getNote(1);

Упс… не хватает прав на использование схемы my_schema 🤷🏻‍♂️

4️⃣ Дадим грант на схему
grant usage on schema my_schema to mydb_app;

Вызовем функцию, получим следующую ошибку:
ERROR: permission denied for table my_tab
CONTEXT: SQL function "getnote" statement 1

5️⃣ Дадим грант на таблицу
grant select on my_tab to mydb_app;

Выполним и получим результат:
mydb=> select my_schema.getNote(1);
getnote
---------
text 1
(1 row)

Ура! Все работает 👍

Получилось немного витиевато. В Oracle:
🔹не требуется выдавать отдельно грант на использование схемы;
🔹нужно выдать грант на execute функции;
🔹не нужны гранты на каждый объект, который используется внутри функции (за некоторыми исключениями).

Если окунуться в документацию, то можно обнаружить множество отличий в системе прав от Oracle.

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

#postgresql
Oracle Developer
👍21
Расширение PostgreSQL

Что мне сильно нравится в Pg, так это возможность добавлять новые фишки в СУБД за счет расширений (extension).

Расширения разделяются на два типа:
1️⃣ поставляемые в дистрибутиве;
2️⃣ созданные пользователями.

Любой может написать свой плагин. Довольно крутая концепция, используемая многими open source продуктами. Из кубиков конструируете нужное вам решение.

Уже создано достаточное количество пользовательских расширений. Вполне вероятно, под вашу специальную задачу уже есть готовое решение.

Можно легко нагуглить инструкции как создавать плагины + есть отличная документация.

Установкой, обновлением, удалением расширений, обычно, занимаются DBA с подачи разработки.

Список установленных расширений в БД:
select * from pg_available_extensions

Естественно, есть платные и бесплатные плагины. Часть из них можно посмотреть в этом каталоге или в этом + гугл никто не отменял. Очень бы пригодился репозиторий аля MavenCentral 🤷🏻‍♂️

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

#postgresql
Oracle Developer
👍181
PostgreSQL заключение

В этих 10 постах, мы едва коснулись PostgreSQL. Кроличья нора гораздо глубже 🐰

То, что компании пытаются перейти с Oracle на Pg, не означает, что архитектура, язык PL/pgSQL один в один. Общие принципы - одинаковые, но реализация - разная. Взять, например, мультиверсионность строк.
Когда я учился на курсах PostgresPro (архитектура и оптимизация в 2019м), выписал около трех листов А4 различий между двумя СУБД с точки зрения разработчика. Если углубиться в администрирование там еще наберется листов Nцать.

Так почему же компании переходит на PG? Все просто, PostgreSQL - это достойная альтернатива Oracle в классе РСУБД.

Я не особый любитель Pg. Это как пересесть с Mercedes (Oracle) на отечественный авто (Pg). Тем не менее, избегать изучения PostgreSQL не стоит.

Причины
🔹 Активное развитие СУБД - авторы и энтузиасты дорабатывают ядро, пилят многочисленные расширения, фишки платных версий постепенно заносят в community-версию;
🔹 Наличие бесплатной версии - снижение стоимости владения по сравнению с тем же Oracle;
🔹 Все больше решений с использованием Pg;
🔹 Политические и санкционные моменты (актуально для РФ).

На мой взгляд, в будущем Postgres существенно потеснит конкурентов с рынка 👍

Пора заканчивать с Pg, что-то я соскучился по Oracle ☺️

Если интересно раскрытие темы по различию между Pg и Oracle - ставьте 🔥. Наберется хотя бы 200, буду иногда пилить посты на эту тему 🎓

#postgresql
Oracle Developer
🔥155👍62
Собеседование в Сбер.ДомКлик

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

Что-то давно у нас ничего про собеседования не было. Исправляюсь.
Перед новым годом рекрутеры оживились. Было аж два приглашения на поболтать.
Одна из контор - Сбер, на проект ДомКлик.

Кратко по вакансии (полное в чатике)
Мы используем: IBSO, OpenShift, PL/Plus, Oracle PL/SQL, Java, Kotlin, Groovy, Spring Boot, Hibernate, REST, VuGen, BPMN, Camunda, Jenkins, Git, Bitbucket, Jira, Confluence.

Задачи:
разработка новых и развитие существующих кредитных микросервисов на АБС IBSO и Java

Наши требования:
Опыт разработки IBSO PL/Plus, Oracle PL/SQL, приветствуется опыт разработки на java, управление контейнерами с сервисами в OpenShift.

Продолжение ⬇️