Всем привет!
Заметили, что постов не было? 😊
Подкосил меня один известный вирусок 🦠 Потихоньку восстанавливаюсь...
Что б сильно не скучали, расскажу про кейс одного из моих студентов. Упростил очень сильно для примера.
Дан PL/SQL-блок. Меняется таблица payment_detail. Она существует, в ней есть записи.
Определение таблицы можно посмотреть здесь.
#задача
Заметили, что постов не было? 😊
Подкосил меня один известный вирусок 🦠 Потихоньку восстанавливаюсь...
Что б сильно не скучали, расскажу про кейс одного из моих студентов. Упростил очень сильно для примера.
Дан PL/SQL-блок. Меняется таблица payment_detail. Она существует, в ней есть записи.
declareЧто можете сказать про этот код? Все ли с ним в порядке?
v_payment_id payment.payment_id%type := 121;
v_field_id payment_detail.field_id%type := 2;
begin
update payment_detail
set field_value = 'xxxx'
where v_payment_id = v_payment_id
and field_id = v_field_id;
end;
/
Определение таблицы можно посмотреть здесь.
#задача
Задача: постановку смотрите в посте вторника.
Решение:
В примере показана, довольно часто, встречающаяся ошибка у новичков.
Задумка автора: обновить значение в поле для клиента “121” с ID поля равным “2”.
По какой-то причине, автор указал “v_payment_id = v_payment_id” вместо “payment_id = v_payment_id”.
Если преобразовать исходный запрос получится:
Неприятно 😕
Как бороться?
1️⃣ Внимательность при написании запросов.
2️⃣ Тестирование кода.
3️⃣ Code-review в команде.
4️⃣ Статические анализаторы кода. Например, SonarQube. Он, совершенно точно, умеет понимать такие ошибки.
Кстати, если интересно могу как-нибудь запилить видос с SonarQube 🎥
Всем хорошего дня!
#решениезадачи
Решение:
В примере показана, довольно часто, встречающаяся ошибка у новичков.
Задумка автора: обновить значение в поле для клиента “121” с ID поля равным “2”.
По какой-то причине, автор указал “v_payment_id = v_payment_id” вместо “payment_id = v_payment_id”.
Если преобразовать исходный запрос получится:
update payment_detailФактически первое условие можно отбросить, потому как оно всегда истинно. Таким образом, произойдет обновление всех строк в таблице payment_detail с field_id = “2”.
set field_value = 'xxxx'
where 121 = 121
and field_id = v_field_id;
Неприятно 😕
Как бороться?
1️⃣ Внимательность при написании запросов.
2️⃣ Тестирование кода.
3️⃣ Code-review в команде.
4️⃣ Статические анализаторы кода. Например, SonarQube. Он, совершенно точно, умеет понимать такие ошибки.
Кстати, если интересно могу как-нибудь запилить видос с SonarQube 🎥
Всем хорошего дня!
#решениезадачи
Задача: дано три DML-триггера на некую таблицу some_tab.
Нужно чтобы при вставке в буфере вывода было: CBA
A - никак не сделать, триггеры срабатывают в случайной последовательности.
B - триггеры нужно создать в той очередности, в которой нужно срабатывание.
C - есть опция Ordered в синтаксисе триггера, которая указывает очередность.
D - есть другая опция в синтаксисе триггера, которая указывает очередность.
Обсуждение задачи в четверг 🎓
#задача
Нужно чтобы при вставке в буфере вывода было: CBA
create table some_tabВарианты:
(
some_col number(38) not null
);
create or replace trigger some_tab_trg_A
after insert
on some_tab
begin
dbms_output.put_line('A');
end;
/
create or replace trigger some_tab_trg_C
after insert
on some_tab
begin
dbms_output.put_line('C');
end;
/
create or replace trigger some_tab_trg_B
after insert
on some_tab
begin
dbms_output.put_line('B');
end;
/
insert into some_tab values(1);
A - никак не сделать, триггеры срабатывают в случайной последовательности.
B - триггеры нужно создать в той очередности, в которой нужно срабатывание.
C - есть опция Ordered в синтаксисе триггера, которая указывает очередность.
D - есть другая опция в синтаксисе триггера, которая указывает очередность.
Обсуждение задачи в четверг 🎓
#задача
Очередность срабатывания триггеров
Задача: см постановку в посте вторника.
Решение
В Oracle 11g, в синтаксисе создания триггера, появилась опция FOLLOWS.
Ей можно задать за каким триггером срабатывать текущему.
Итого:
Ссылка на доку под постом ⬇️
#решениезадачи #trigger
Задача: см постановку в посте вторника.
Решение
В Oracle 11g, в синтаксисе создания триггера, появилась опция FOLLOWS.
Ей можно задать за каким триггером срабатывать текущему.
Итого:
create or replace trigger some_tab_trg_AВозможно, вам где-то это пригодится 😉
after insert
on some_tab
follows some_tab_trg_B
begin
dbms_output.put_line('A');
end;
/
create or replace trigger some_tab_trg_C
after insert
on some_tab
begin
dbms_output.put_line('C');
end;
/
create or replace trigger some_tab_trg_B
after insert
on some_tab
follows some_tab_trg_C
begin
dbms_output.put_line('B');
end;
/
Ссылка на доку под постом ⬇️
#решениезадачи #trigger
Всем привет!
Вполне вероятно, что, проходя собеседование на DBD или Backend-разработчика вы можете столкнуться с таким вопросом:
“Какая разница между UNION и UNION ALL с точки зрения оптимизации?”
Что ответите?
Разбор задачи с планами запросов, как обычно, в четверг 🎓
Не переключайтесь 😉
—
Интересно вам уже задавали на собесе этот вопрос? Голосовалка под постом 📊
#задача
Вполне вероятно, что, проходя собеседование на DBD или Backend-разработчика вы можете столкнуться с таким вопросом:
“Какая разница между UNION и UNION ALL с точки зрения оптимизации?”
Что ответите?
Разбор задачи с планами запросов, как обычно, в четверг 🎓
Не переключайтесь 😉
—
Интересно вам уже задавали на собесе этот вопрос? Голосовалка под постом 📊
#задача
Разница между UNION и UNION ALL с точки зрения оптимизации
Постановка задачи в посте вторника.
Начнем с простого. Что это за операции?
▫️UNION - объединяет два множества, оставляет только уникальные значения.
▫️UNION ALL - объединяет два множества, значения не уникальны, т.е. могут быть повторы.
Пока разница очевидна.
Пример:
За счет дополнительного шага сортировки. И это прекрасно видно в плане запроса. После шага UNION-ALL выполняется SORT.
Я всегда говорю, если вам сортировка не требуется, то не надо её делать. Избавляемся от лишних сортировок.
⚠️ Возьмите за правило, использовать по умолчанию операцию UNION ALL, которая не выполняет сортировку. Только, если по бизнес-процессу требуется уникальность значений используйте UNION. Помогите СУБД избавиться от лишней работы 😉
#оптимизация #union #unionall
Постановка задачи в посте вторника.
Начнем с простого. Что это за операции?
▫️UNION - объединяет два множества, оставляет только уникальные значения.
▫️UNION ALL - объединяет два множества, значения не уникальны, т.е. могут быть повторы.
Пока разница очевидна.
Пример:
select some_col1 from tab1Давайте подумаем, а в чем различие операций на уровне выполнения. За счет чего достигается уникальность отдаваемых значений в UNION?
union
select some_col1 from tab2;
За счет дополнительного шага сортировки. И это прекрасно видно в плане запроса. После шага UNION-ALL выполняется SORT.
Я всегда говорю, если вам сортировка не требуется, то не надо её делать. Избавляемся от лишних сортировок.
⚠️ Возьмите за правило, использовать по умолчанию операцию UNION ALL, которая не выполняет сортировку. Только, если по бизнес-процессу требуется уникальность значений используйте UNION. Помогите СУБД избавиться от лишней работы 😉
#оптимизация #union #unionall
Друзья, всем привет!
Сегодняшний пост про внутреннюю жизнь канала.
1️⃣ Нативная реклама от Telegram
Телеграм стал монетизировать свою аудиторию. Начали размещать объявления в каналах. Когда вы видите рекламный пост с пометкой sponsored (как на скрине выше), это вот оно. Я не могу повлиять на ее отображение. Прошу отнестись к этому с пониманием.
Я иногда, размещаю рекламные посты с тегом #реклама. Деньги идут на продвижение канала, ибо для меня это не бесплатно. И да, расходы больше чем доходы.
2️⃣ Комментарии к постам
К сожалению, не ко всем постам добавляются нативные комментарии. Если пост с голосованием или ссылками в виде кнопки, то плашка с комментами не отображается.
Но! есть выход. Вы можете вступить в чат канала. И тогда у вас появится возможность комментировать любой пост в канале. Некоторое количество подписчиков уже там.
Нужно жямкнуть свойства канала -> View discussion -> Join group
Велком!
Кстати, в понедельник, будет кое-что интересное 😉
Всем хороших выходных! 👯♀️
Сегодняшний пост про внутреннюю жизнь канала.
1️⃣ Нативная реклама от Telegram
Телеграм стал монетизировать свою аудиторию. Начали размещать объявления в каналах. Когда вы видите рекламный пост с пометкой sponsored (как на скрине выше), это вот оно. Я не могу повлиять на ее отображение. Прошу отнестись к этому с пониманием.
Я иногда, размещаю рекламные посты с тегом #реклама. Деньги идут на продвижение канала, ибо для меня это не бесплатно. И да, расходы больше чем доходы.
2️⃣ Комментарии к постам
К сожалению, не ко всем постам добавляются нативные комментарии. Если пост с голосованием или ссылками в виде кнопки, то плашка с комментами не отображается.
Но! есть выход. Вы можете вступить в чат канала. И тогда у вас появится возможность комментировать любой пост в канале. Некоторое количество подписчиков уже там.
Нужно жямкнуть свойства канала -> View discussion -> Join group
Велком!
Кстати, в понедельник, будет кое-что интересное 😉
Всем хороших выходных! 👯♀️
Друзья, всем привет!
Я уже давно “закидывал удочку” на тему авторских постов в канале. Давайте еще раз озвучу мысль 💡
У нас тут абсолютно разные люди - по специализациям, по уровню знаний, по уникальному опыту. Этим можно было поделиться с другими коллегами.
Я даю возможность любому желающему опубликовать свой пост, задачу\решение, вопрос с собеседования или что-то другое интересное для аудитории канала. Естественно, с указанием автора.
Это отличная возможность, поделиться вашими знаниями, получить обратную связь, пообщаться с коллегами 💬
Конечно, есть определенные правила, налагаемые в основном, форматом Telegram. Посты должны быть краткими, отформатированными, отражающими суть. Как форматировать посты можно посмотреть на примере моих. Все это обсуждается в личке.
В эту среду, я опубликую пост от нашего подписчика. Это будет первый пост подобного рода 👍
Хочу напомнить, что в этом канале нет места негативу, наоборот, приветствуется поддержка и конструктивные замечания.
Всем хорошей недели!
Я уже давно “закидывал удочку” на тему авторских постов в канале. Давайте еще раз озвучу мысль 💡
У нас тут абсолютно разные люди - по специализациям, по уровню знаний, по уникальному опыту. Этим можно было поделиться с другими коллегами.
Я даю возможность любому желающему опубликовать свой пост, задачу\решение, вопрос с собеседования или что-то другое интересное для аудитории канала. Естественно, с указанием автора.
Это отличная возможность, поделиться вашими знаниями, получить обратную связь, пообщаться с коллегами 💬
Конечно, есть определенные правила, налагаемые в основном, форматом Telegram. Посты должны быть краткими, отформатированными, отражающими суть. Как форматировать посты можно посмотреть на примере моих. Все это обсуждается в личке.
В эту среду, я опубликую пост от нашего подписчика. Это будет первый пост подобного рода 👍
Хочу напомнить, что в этом канале нет места негативу, наоборот, приветствуется поддержка и конструктивные замечания.
Всем хорошей недели!
Функции SQL vs Функции PL/SQL
Всем привет!
Вы уже задумывались о различиях между стандартными SQL и PL/SQL функциями? «А разве, между ними существуют различия?» - спросит новичок.
⚠️ Да, это разные функции и иногда они ведут себя по-разному.
В Oracle Database, как известно, есть два разных движка: для выполнения SQL-запросов и для PL/SQL-кода. Как все знают, следует избегать лишних переключения между этими движками. Чтобы таких переключений происходило как можно меньше, для SQL и PLSQL имеются свои реализации стандартных функций, описанных в документации. Они работают почти всегда одинаково и в обычной практике мы их не различаем, Например:
1️⃣ В PL/SQL может не оказаться соответствующей функции из SQL. Например, вы не сможете в PL/SQL-коде напрямую вызвать SQL-функции NVL2 и DECODE. Видимо, разработчики не стали включать в состав языка эти функции посчитав достаточно универсальной конструкцию CASE. Наличие интересующей функции можно проверить в пакете SYS.STANDARD. Также можно обратиться к документации на язык PL/SQL и проверить вызов на практике в обычном анонимном PL/SQL-блоке.
2️⃣ В SQL может не оказаться "своей" вызываемой функции. В таком случае можно попробовать обратиться к PL/SQL-функции напрямую через пакет SYS.STANDARD. Например:
3️⃣ Одноимённые реализации функции в SQL и PL/SQL-движках могут выдавать разные результаты. К сожалению, такое иногда встречается, поскольку каждую из реализаций внутри Oracle Database писали и поддерживали разные люди. Я натыкался на различия в результатах для функции
✅Пожалуйста, напишите в комментариях, встречалось ли вам что-то подобное.
Автор: @alexeionin
#функции
Всем привет!
Вы уже задумывались о различиях между стандартными SQL и PL/SQL функциями? «А разве, между ними существуют различия?» - спросит новичок.
⚠️ Да, это разные функции и иногда они ведут себя по-разному.
В Oracle Database, как известно, есть два разных движка: для выполнения SQL-запросов и для PL/SQL-кода. Как все знают, следует избегать лишних переключения между этими движками. Чтобы таких переключений происходило как можно меньше, для SQL и PLSQL имеются свои реализации стандартных функций, описанных в документации. Они работают почти всегда одинаково и в обычной практике мы их не различаем, Например:
declare
my_var integer;
begin
select nvl(c.a, c.b) into my_var from my_table c; -- Вызов SQL-функции
my_var := nvl(my_var, 0); -- Вызов PL/SQL-функции
end;
/Зачем нам нужно помнить о разных функциях? Причин несколько:
1️⃣ В PL/SQL может не оказаться соответствующей функции из SQL. Например, вы не сможете в PL/SQL-коде напрямую вызвать SQL-функции NVL2 и DECODE. Видимо, разработчики не стали включать в состав языка эти функции посчитав достаточно универсальной конструкцию CASE. Наличие интересующей функции можно проверить в пакете SYS.STANDARD. Также можно обратиться к документации на язык PL/SQL и проверить вызов на практике в обычном анонимном PL/SQL-блоке.
2️⃣ В SQL может не оказаться "своей" вызываемой функции. В таком случае можно попробовать обратиться к PL/SQL-функции напрямую через пакет SYS.STANDARD. Например:
select sys.standard.sqlcode from dualВ таком случае произойдёт то самое переключение контекста. Но не всякая PL/SQL-функция доступна в SQL из-за различий в поддерживаемых типах данных (Движок SQL ничего не знает о типе BOOLEAN).
3️⃣ Одноимённые реализации функции в SQL и PL/SQL-движках могут выдавать разные результаты. К сожалению, такое иногда встречается, поскольку каждую из реализаций внутри Oracle Database писали и поддерживали разные люди. Я натыкался на различия в результатах для функции
TO_CHAR(left number, format varchar2, parms varchar2)
. Функции применяли разное выравнивание пробелами и приходилось прилагать дополнительные усилия, чтобы преобразование везде работало одинаково.✅Пожалуйста, напишите в комментариях, встречалось ли вам что-то подобное.
Автор: @alexeionin
#функции
Telegram
Oracle Developer👨🏻💻
Пакет sys.standard
Довольно интересный системный пакет.
Содержит в себе определения типов, функций, именованных исключений и много чего другого. Можно сказать, все определение языка PL/SQL =)
Станем понятно, что за тип STRING или например, VARRAY. Чем они…
Довольно интересный системный пакет.
Содержит в себе определения типов, функций, именованных исключений и много чего другого. Можно сказать, все определение языка PL/SQL =)
Станем понятно, что за тип STRING или например, VARRAY. Чем они…
Друзья, всем привет!
А у нас сегодня вакансия с релокейтом в Гданьск (Польша). Вдруг кто-то хочет поменять локацию? Ну, вдруг 😉
Кратко, чем необходимо заниматься: миграция с разных СУБД в облако от Амазона.
Причем судя по описанию, ребята готовы обучать: No previous cloud experience is required for this job
В общем, если интересно, пишите @Distorge
https://jobs-us-east.amazon.com/es/jobs/1676280/database-engineer-aws-database-migration-accelerator
#вакансия
А у нас сегодня вакансия с релокейтом в Гданьск (Польша). Вдруг кто-то хочет поменять локацию? Ну, вдруг 😉
Кратко, чем необходимо заниматься: миграция с разных СУБД в облако от Амазона.
Причем судя по описанию, ребята готовы обучать: No previous cloud experience is required for this job
В общем, если интересно, пишите @Distorge
https://jobs-us-east.amazon.com/es/jobs/1676280/database-engineer-aws-database-migration-accelerator
#вакансия
Подсветка интерфейса в зависимости от БД
Всем привет!
Пост будет полезен тем, кто использует IDE PL/SQL Developer.
100% вы встречались с ситуацией, когда выполняли скрипт не на той БД, не в той среде и т.п. Для предупреждения таких фейлов, многие IDE позволяют раскрашивать интерфейс в зависимости от коннекта к той или иной БД.
Не исключение мой любимый инструмент - PL/SQL Developer. Но не многие DBD/DBA знают про эту возможность.
Если зайти в меню Preferences -> Appearance, то в разделе “Connection Indicators” можно задать правила для подкрашивания интерфейса.
Шаблоны могут быть такими:
▫️ *@*dev
▫️ myuser@*
▫️ myser@some_proddb и т.д.
Для каждого шаблона задается цвет. Обычно делают: красный для Prod-сред, желтый для тестовых, зеленый для dev.
На скрине я подключен к БД содержащей в строке подключения слово dev. Соответственно, индикаторы подсвечены зеленым.
В PL/SQL Developer’e очень много разных фишек. Могу поделиться, если интересно 😉
Всем хорошей рабочей недели 👍
#ide
Всем привет!
Пост будет полезен тем, кто использует IDE PL/SQL Developer.
100% вы встречались с ситуацией, когда выполняли скрипт не на той БД, не в той среде и т.п. Для предупреждения таких фейлов, многие IDE позволяют раскрашивать интерфейс в зависимости от коннекта к той или иной БД.
Не исключение мой любимый инструмент - PL/SQL Developer. Но не многие DBD/DBA знают про эту возможность.
Если зайти в меню Preferences -> Appearance, то в разделе “Connection Indicators” можно задать правила для подкрашивания интерфейса.
Шаблоны могут быть такими:
▫️ *@*dev
▫️ myuser@*
▫️ myser@some_proddb и т.д.
Для каждого шаблона задается цвет. Обычно делают: красный для Prod-сред, желтый для тестовых, зеленый для dev.
На скрине я подключен к БД содержащей в строке подключения слово dev. Соответственно, индикаторы подсвечены зеленым.
В PL/SQL Developer’e очень много разных фишек. Могу поделиться, если интересно 😉
Всем хорошей рабочей недели 👍
#ide
Recall Statement - Перевызов запроса
Всем привет!
Еще один пост для тех кто использует IDE PL/SQL Developer.
Есть возможность открыть список выполнявшихся команд в IDE. Экономит время и нервы. Нет необходимости писать запрос заново, можно взять уже когда-то написанный. Я достаточно часто использую. Как это выглядит см скрин ⬆️
Открыть можно через комбинацию - CNTRL+E или меню Edit -> Recall Statement.
Появится окно с выполненными запросами. Можно сортировать по дате, по тексту, по коннекту. Если не ошибаюсь, в 14й версии PL/SQL Developer добавили возможность фильтрации, раньше этого очень не хватало.
Количество сохраняемых запросов можно установить в настройках: Configure -> Preferences -> Tools -> Recall Statement.
По-моему, в dbForge и в TOAD тоже есть такие возможности.
DataGrip? SQL Developer? DBeaver?
Можете написать в комментах про свою любимую IDE.
Удобный настроенный инструмент облегчает и ускоряет любую работу 😉
#ide
Всем привет!
Еще один пост для тех кто использует IDE PL/SQL Developer.
Есть возможность открыть список выполнявшихся команд в IDE. Экономит время и нервы. Нет необходимости писать запрос заново, можно взять уже когда-то написанный. Я достаточно часто использую. Как это выглядит см скрин ⬆️
Открыть можно через комбинацию - CNTRL+E или меню Edit -> Recall Statement.
Появится окно с выполненными запросами. Можно сортировать по дате, по тексту, по коннекту. Если не ошибаюсь, в 14й версии PL/SQL Developer добавили возможность фильтрации, раньше этого очень не хватало.
Количество сохраняемых запросов можно установить в настройках: Configure -> Preferences -> Tools -> Recall Statement.
По-моему, в dbForge и в TOAD тоже есть такие возможности.
DataGrip? SQL Developer? DBeaver?
Можете написать в комментах про свою любимую IDE.
Удобный настроенный инструмент облегчает и ускоряет любую работу 😉
#ide
Как готовят Oracle в Спортмастере
Друзья, всем привет!
В рабочих чатиках уже давно мелькало это интервью. Вполне вероятно, что вы его уже видели, но у меня все как-то не доходили руки. Наконец-то, на этих выходных удалось урвать почти час свободного времени (на скорости x1.25) на просмотр.
Было интересно послушать, чем живет разработка в “Спортмастере”.
Моё мнение, вполне себе приятное интересное интервью.
Коллеги используют (тезисно):
▫️GitLab для поставки инкремента;
▫️EBR для наката программных объектов без остановки;
▫️Crucible для code-review;
▫️SonarQube для автоматической проверки кода;
▫️Pluggable Database для создания окружения;
▫️Unit-тестирование (utPL/SQL) и др.
Отличный джентльменский набор. Такое не в каждой компании увидишь. К слову сказать, в Qiwi, где я сейчас имею счастье работать, большая часть из этого также используется. Привет коллегам 😉
Я впервые публикую видео не со своего канала. Возможно, стоит это делать чаще, с интересными материалами.
Приятного просмотра!
Как готовят Oracle в Спортмастере / Максим Пермяков
#видео
Друзья, всем привет!
В рабочих чатиках уже давно мелькало это интервью. Вполне вероятно, что вы его уже видели, но у меня все как-то не доходили руки. Наконец-то, на этих выходных удалось урвать почти час свободного времени (на скорости x1.25) на просмотр.
Было интересно послушать, чем живет разработка в “Спортмастере”.
Моё мнение, вполне себе приятное интересное интервью.
Коллеги используют (тезисно):
▫️GitLab для поставки инкремента;
▫️EBR для наката программных объектов без остановки;
▫️Crucible для code-review;
▫️SonarQube для автоматической проверки кода;
▫️Pluggable Database для создания окружения;
▫️Unit-тестирование (utPL/SQL) и др.
Отличный джентльменский набор. Такое не в каждой компании увидишь. К слову сказать, в Qiwi, где я сейчас имею счастье работать, большая часть из этого также используется. Привет коллегам 😉
Я впервые публикую видео не со своего канала. Возможно, стоит это делать чаще, с интересными материалами.
Приятного просмотра!
Как готовят Oracle в Спортмастере / Максим Пермяков
#видео
YouTube
Разработка БАЗ ДАННЫХ! / Как готовят Oracle в Спортмастере / Максим Пермяков
Из выпуска вы узнаете, как программисты Спортмастера привносят культуру в процесс разработки баз данных. Гость выпуска директор департаментов разработки и системного анализа в Sportmaster Lab - Максим Пермяков.
Тестирование баз данных, CI и CD, кодовые…
Тестирование баз данных, CI и CD, кодовые…
❤1👍1
Задача
Дана функция - sleep. Просто засыпание на N секунд с возможностью использования как функции в SQL и PL/SQL. Всегда возвращается “1”.
Рекомендую не повторять этот код, а подумать и выбрать ответ. И только после этого, повторить в СУБД и проверить себя.
#задача
Дана функция - sleep. Просто засыпание на N секунд с возможностью использования как функции в SQL и PL/SQL. Всегда возвращается “1”.
create or replace function sleep(p_sec number) return numberВыполняется такой запрос:
is
begin
dbms_session.sleep(p_sec); -- 18+
-- dbms_lock.sleep(p_sec); -- до 18
return 1;
end;
/
select nvl(sleep(5), sleep(10)) from dual;За сколько секунд он выполнится?
Рекомендую не повторять этот код, а подумать и выбрать ответ. И только после этого, повторить в СУБД и проверить себя.
#задача
Задача: постановка в посте вторника.
Решение:
Вспомним для чего нужна функция NVL. Если первый аргумент null, то возвращается второй аргумент.
На примере: nvl(null, 2), результатом будет “2”.
Тогда какой правильный ответ в задаче?
Первый аргумент возвращает “1” - не null. Значит запрос выполнится за 5 секунд?
К сожалению, нет. Не важно какое значение в первом аргументе (null, не null), второй аргумент будет вычисляться всегда. Это допустимо, когда это просто литерал (как в примере выше). Но если это что-то вычисляемое или получение значение из сиквенса, то мы столкнемся с сайд-эффектами. В документации, явно об этом не написано.
Возвращаясь к нашей задачи. 5 секунд будет потрачено при вычислении первого аргумента и 10 секунд для второго. Итого: 15 секунд.
Как с этим бороться? Использовать альтернативные функции. Например, COALESCE.
О ней я расскажу более подробно в следующих постах.
#решениезадачи #функции #nvl #coalesce
Решение:
Вспомним для чего нужна функция NVL. Если первый аргумент null, то возвращается второй аргумент.
На примере: nvl(null, 2), результатом будет “2”.
Тогда какой правильный ответ в задаче?
Первый аргумент возвращает “1” - не null. Значит запрос выполнится за 5 секунд?
К сожалению, нет. Не важно какое значение в первом аргументе (null, не null), второй аргумент будет вычисляться всегда. Это допустимо, когда это просто литерал (как в примере выше). Но если это что-то вычисляемое или получение значение из сиквенса, то мы столкнемся с сайд-эффектами. В документации, явно об этом не написано.
Возвращаясь к нашей задачи. 5 секунд будет потрачено при вычислении первого аргумента и 10 секунд для второго. Итого: 15 секунд.
Как с этим бороться? Использовать альтернативные функции. Например, COALESCE.
О ней я расскажу более подробно в следующих постах.
#решениезадачи #функции #nvl #coalesce
Канал с отзывами 🗣
Всем привет!
Когда-то далеким январем 2020-го, я купил курс по созданию Telegram-каналов (да, я тоже обучаюсь и тоже покупаю обучение).
В одной из глав мануала было примерно следующее: “заведите второй канал и добавляйте в него отзывы по вашим услугам, обратную связь и т.д. Он будет полезен”.
Я тогда на это подзабил, ибо все казалось туманным и, исходя из принципа “бережливого производства”, смысла этим тогда заниматься не было.
Вернемся в настоящее. Прошло почти 2️⃣ года с момента основания канала. Много чего было сделано - курс по PL/SQL, интенсив по секционированию, частные консультации. Получена обратная связь по YouTube и Telegram-каналам. А я так и не сделал канал-отзовик... 🤦🏻♂️
“Пора исправляться” подумал я и потратил воскресенье на его создание.
Можно сходить сюда и посмотреть, чего там Денис насобирал 😉
Это пока не все отзывы, но с чего-то надо начинать. Буду постепенно публиковать.
#отзывы
Всем привет!
Когда-то далеким январем 2020-го, я купил курс по созданию Telegram-каналов (да, я тоже обучаюсь и тоже покупаю обучение).
В одной из глав мануала было примерно следующее: “заведите второй канал и добавляйте в него отзывы по вашим услугам, обратную связь и т.д. Он будет полезен”.
Я тогда на это подзабил, ибо все казалось туманным и, исходя из принципа “бережливого производства”, смысла этим тогда заниматься не было.
Вернемся в настоящее. Прошло почти 2️⃣ года с момента основания канала. Много чего было сделано - курс по PL/SQL, интенсив по секционированию, частные консультации. Получена обратная связь по YouTube и Telegram-каналам. А я так и не сделал канал-отзовик... 🤦🏻♂️
“Пора исправляться” подумал я и потратил воскресенье на его создание.
Можно сходить сюда и посмотреть, чего там Денис насобирал 😉
Это пока не все отзывы, но с чего-то надо начинать. Буду постепенно публиковать.
#отзывы
Telegram
Отзывы об обучении у Кивилёва Дениса
Здесь можно посмотреть отзывы по проведенным курсам, интенсивам, индивидуальным консультациям у автора канала Oracle Developer - Кивилёва Дениса
Связь - @denis_dbd
Канал Oracle Developer - @oracle_dbd
Связь - @denis_dbd
Канал Oracle Developer - @oracle_dbd
👍5❤1
Задача
Дана функция - sleep. Просто засыпание на N секунд с возможностью использования как функции в SQL и PL/SQL. Всегда возвращается “1”.
Рекомендую не повторять этот код, а подумать и выбрать ответ. И только после этого, повторить в СУБД и проверить себя 😉
—
⚠️ Завтра будет анонс нового потока на курс “Oracle PL/SQL.Основы”. А пока, можно почитать отзывы ребят с предыдущих потоков.
#задача
Дана функция - sleep. Просто засыпание на N секунд с возможностью использования как функции в SQL и PL/SQL. Всегда возвращается “1”.
create or replace function sleep(p_sec number) return numberВыполняется такой запрос:
is
begin
dbms_session.sleep(p_sec); -- 18+
-- dbms_lock.sleep(p_sec); -- до 18
return 1;
end;
/
select coalesce(sleep(5), sleep(5), sleep(5))За сколько секунд он выполнится?
from dual;
Рекомендую не повторять этот код, а подумать и выбрать ответ. И только после этого, повторить в СУБД и проверить себя 😉
—
⚠️ Завтра будет анонс нового потока на курс “Oracle PL/SQL.Основы”. А пока, можно почитать отзывы ребят с предыдущих потоков.
#задача
Друзья, всем привет!
Рад сообщить, о старте третьего потока курса “Oracle PL/SQL.Основы”.
Он будет полезен: QA-инженерам, разработчикам, аналитикам.
Основная цель: научить вас читать чужой и писать свой PL/SQL-код, достаточный для современной разработки и закрытия рабочих задач.
🔹22 видео с теорией;
🔹24 практики = единый проект;
🔹13 онлайн встреч в Zoom с разбором вопросов;
🔹закрытый телеграм-канал;
🔹старт в январе 2022.
Практика построена таким образом, чтобы вы с нуля, шаг за шагом, создали API на PL/SQL для прототипа платежной системы. Начав с анонимных блоков вы закончите своим мини-фреймворком для Unit-тестирования. Пример.
Подробности и программа - здесь. Отзывы - здесь.
Для тех кто заинтересован, но пока не уверен, я создал промо-группу курса, в которой буду размещать подробности, отрывки с занятий, отвечать на вопросы (да вы можете их сразу задавать) и даже встретимся онлайн. Залетайте!
P.S. Студентам, успешно закончившим курс, будет бонус в виде рекомендаций при трудоустройстве в Qiwi 🐥
Рад сообщить, о старте третьего потока курса “Oracle PL/SQL.Основы”.
Он будет полезен: QA-инженерам, разработчикам, аналитикам.
Основная цель: научить вас читать чужой и писать свой PL/SQL-код, достаточный для современной разработки и закрытия рабочих задач.
🔹22 видео с теорией;
🔹24 практики = единый проект;
🔹13 онлайн встреч в Zoom с разбором вопросов;
🔹закрытый телеграм-канал;
🔹старт в январе 2022.
Практика построена таким образом, чтобы вы с нуля, шаг за шагом, создали API на PL/SQL для прототипа платежной системы. Начав с анонимных блоков вы закончите своим мини-фреймворком для Unit-тестирования. Пример.
Подробности и программа - здесь. Отзывы - здесь.
Для тех кто заинтересован, но пока не уверен, я создал промо-группу курса, в которой буду размещать подробности, отрывки с занятий, отвечать на вопросы (да вы можете их сразу задавать) и даже встретимся онлайн. Залетайте!
P.S. Студентам, успешно закончившим курс, будет бонус в виде рекомендаций при трудоустройстве в Qiwi 🐥
Задача: постановка в посте вторника.
Решение:
Функцию COALESCE я упомянул еще на прошлой недели в качестве альтернативы NVL. Однако, опрос вторника немного удивляет 😉
Основные отличия от NVL
1️⃣ Функция может принимать более двух аргументов.
2️⃣ Используется короткозамкнутое вычисление (short-circuit evaluation), т.е. аргументы вычисляются по мере надобности.
3️⃣ В coalesce все аргументы должны быть одного типа. NVL - неявно преобразует тип второго аргумента к первому. Есть особенности, см. доку ⚠️
4️⃣ Функция относится к ANSI SQL, может быть использована в других РСУБД. NVL - чисто Оракловая поделка.
5️⃣ Отличия в выполнении запросов.
Согласно п.2. правильный ответ: 5 секунд.
Функция не будет вычислять ни второй, ни третий аргументы, т.к. первый аргумент не null.
Дополнительная задачка на подумать: выполнится или нет?
select nvl(10, 'abc') from dual;
—
В новом году, можно начать изучать PL/SQL с опытным наставником. Переходите на темную сторону 😈
#решениезадачи #функции #nvl #coalesce
Решение:
Функцию COALESCE я упомянул еще на прошлой недели в качестве альтернативы NVL. Однако, опрос вторника немного удивляет 😉
Основные отличия от NVL
1️⃣ Функция может принимать более двух аргументов.
2️⃣ Используется короткозамкнутое вычисление (short-circuit evaluation), т.е. аргументы вычисляются по мере надобности.
3️⃣ В coalesce все аргументы должны быть одного типа. NVL - неявно преобразует тип второго аргумента к первому. Есть особенности, см. доку ⚠️
4️⃣ Функция относится к ANSI SQL, может быть использована в других РСУБД. NVL - чисто Оракловая поделка.
5️⃣ Отличия в выполнении запросов.
Согласно п.2. правильный ответ: 5 секунд.
Функция не будет вычислять ни второй, ни третий аргументы, т.к. первый аргумент не null.
Дополнительная задачка на подумать: выполнится или нет?
select nvl(10, 'abc') from dual;
—
В новом году, можно начать изучать PL/SQL с опытным наставником. Переходите на темную сторону 😈
#решениезадачи #функции #nvl #coalesce
👍6