|
|
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Навеяно статьей на хабре. PL/SQL и SQL выполняются на разных движках. Дабы избежать множество переключений контекстов при выполнении кода необходимо, при возможности, оптимизировать код соответствующим образом. Например когда в коде "доходим" до UPDATE, а у него условие с функцией NVL (которая относится к PL/SQL). Поэтому её рекомендуют заменить на COALESCE, встроенную в SQL движок. Логично. Но вопрос. Где можно посмотреть описание какие вещи относятся именно к PL/SQL, а какие к SQL? Скиньте кому встречалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 22:31 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Banks AnalyticsНавеяно статьей на хабре. PL/SQL и SQL выполняются на разных движках. Дабы избежать множество переключений контекстов при выполнении кода необходимо, при возможности, оптимизировать код соответствующим образом. Например когда в коде "доходим" до UPDATE, а у него условие с функцией NVL (которая относится к PL/SQL). Поэтому её рекомендуют заменить на COALESCE, встроенную в SQL движок. Логично. Но вопрос. Где можно посмотреть описание какие вещи относятся именно к PL/SQL, а какие к SQL? Скиньте кому встречалось.А где вы прочитали, что NVL - это PL/SQL? Эта функция встроена в SQL engine. Вообще, PL/SQL вы задействуете, если у вас есть BEGIN...END, т.е. есть процедурный код. Например, если вы написали собственную функцию MYNVL и вызываете ее из обычного UPDATE или SELECT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 22:59 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Alexander Ryndin, Оператор FORALL не вызовет переключений контекстов. Но что здесь еще плохо. Правильно это NVL. NVL — это функция PL/SQL, следовательно снова будет переключение кон текстов. Поэтому ее следует заменить на COALESCE или оператор CASE. https://habrahabr.ru/post/124948/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 23:11 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Banks AnalyticsНавеяно статьей на хабре. PL/SQL и SQL выполняются на разных движках. Дабы избежать множество переключений контекстов при выполнении кода необходимо, при возможности, оптимизировать код соответствующим образом. Например когда в коде "доходим" до UPDATE, а у него условие с функцией NVL (которая относится к PL/SQL). Поэтому её рекомендуют заменить на COALESCE, встроенную в SQL движок. Логично. Но вопрос. Где можно посмотреть описание какие вещи относятся именно к PL/SQL, а какие к SQL? Скиньте кому встречалось. В PL/SQL можно использовать все функции SQL за исключением Это полная жесть... source https://habrahabr.ru/post/124948/ just for fun Статья из оперы как говнокодеры с полным отсутствием базовых знаний и кашей в голове учат других "правильным подходам". Коментаторы как обычно написали "класс, пиши исчо", а у автора не хватило мозгов даже осознать критику xtender. Типичный уровень для хабра (хоть и дело было 6 лет назад). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 23:22 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Banks Analytics, Не надо читать технические статьи на том ресурсе, они не точно бесполезны, они крайне вредны. Хотя я не знаю за все направления, может там есть вменяемые авторы, но все что я встречал касательно программированию в Oracle было полный шлак. То, что попадалось касательно BI, columnar databases, BigData, MPP, etc было просто дилетантство. Когда автор упрощает не искажая - это очень хорошо, когда появляются искажения - лучше их озвучивать либо вообще не писать ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 23:29 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopBanks Analytics, Не надо читать технические статьи на том ресурсе, они не точно бесполезны, они крайне вредны. Ок. Приму к сведению. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 23:47 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Banks Analytics... Где можно посмотреть описание какие вещи относятся именно к PL/SQL, а какие к SQL? Скиньте кому встречалось. About SQL Functions docs.oracle.com/cd/E11882_01/server.112/e41084/functions001.htm#SQLRF51173 SQL functions are built into Oracle Database and are available for use in various appropriate SQL statements. Do not confuse SQL functions with user-defined functions written in PL/SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 01:00 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, SQL Functions in PL/SQL Expressions docs.oracle.com/cd/E11882_01/appdev.112/e25519/fundamentals.htm#LNPLS00212 In PL/SQL expressions, you can use all SQL functions except... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 01:08 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir FilinIn PL/SQL expressions, you can use all SQL functions except...А ты предыдущие ответы в теме читаешь перед тем как постить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 01:18 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, не серчай, поленился, не кликнул... Интересно, откуда "это" пошло - про NVL? Уже не первый раз встречаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 02:07 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, Я не встречал подобных теорий. Возможно, писатель с хабра создает много шума в определенных кругах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 02:21 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Подскажите, в коде из статьи Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. данные засовываются в какую-то коллекцию типа id_list. Что это за тип должен быть, вложенная таблица или что-то иное? Код: plsql 1. И почему процедуры и типы в примере не в пакете? В видеокурсе от "специалиста" всё такое рекомендовалось в пакеты упаковывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 10:00 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
мегамозг, авторКоллекция создается следующим образом: CREATE TYPE id_list IS TABLE OF INTEGER; * This source code was highlighted with Source Code Highlighter. имхо,статья странная, не стоит сильно перениматся ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 10:53 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir FilinИнтересно, откуда "это" пошло - про NVL? Уже не первый раз встречаю Возможно, путают причину и следствие. Я про NVL vs COALESCE читал вот такое: In case of two agruments of same type, these functions are basically the same: they both return first non-NULL values. However, they are implemented differently: - NVL always evaluates both arguments - COALESCE doesn't evaluate anything after it finds the first non-NULL argument Т.е. разница в скорости действительно может быть, но она никак не связана с типом движка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 11:41 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
мегамозгИ почему процедуры и типы в примере не в пакете? В видеокурсе от "специалиста" всё такое рекомендовалось в пакеты упаковывать. Не обязательно в пакеты всё включать. Можно процедуры и функции создать отдельно, исходя из каких-либо соображений. Например, необходимости постоянной валидности процедуры вне зависимости от пакетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 12:49 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, извините, телефон заглючил, что ли... Это из другой темы :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 12:52 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, Какие еще могут быть причины помимо идеологических(сгруппировать по какому-то принципу, корп.стандарты и т.п.)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 12:52 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Вопрошатель2Какие еще могут быть причины помимо идеологических Независимость от пакетов. Реальный пример: pl/sql-хэндлер CQN. Его невалидность может приводить к необходимости его дропа и создания вновь. Не всегда так, но бывает. Сделал его независимой процедурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 13:03 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
TimВ отличие от обычных табличных функций, конвейерные табличные функции могут быть определены с использованием типов "table" и "record", определенных в спецификации пакета. Я правильно понимаю, что в пакете можно определить табличную функцию, возвращающую тип "table" или "record", при этом тип является автономным. Или и функция, и тип должны быть автономными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 14:04 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
немного оффтоп dbms_photoshop, скорее всего непонимание идет еще с тех времен когда у sql в pl\sql и отдельно - были разные движки.(помнишь дисскуссию про 8.1.7 и deciode :) ) там и аналитика не работала и много чего не было. Лично я считаю что переключение контекста вообще не страшная операция, намного страшнее нетранзакционность результата выполнения ufc в sql. хотя большая часть програмистов не задумывается над этим,а вылавливать потом такие ошибки очень мучительно. и насчет хабра абсолютно согласен - бесполезный ресурс для специалиста. ни одной серьезной статьи по ораклу не было. хотя читал подавляющее большинство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 14:10 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
мегамозг, приведи пример. ты путаешься в терминологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 14:10 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vintпереключение контекста вообще не страшная операцияВ 99% случаев да. Но бывает когда вносит очень заметный overhead. Пример задачи: Есть широкая таблица, содаржащая факт и все атрибуты для N измерений. Каждое измерение имеет уникальный ключ состоящий из K i атрибутов. Данных много миллионов строк. Цель загрузить это полностью денормализированное полотно в звезду. Итак, пути загрузки 1) insert all, но надо позаботиться о de-duplication для всех измерений. Для этого можно для каждого из измерений поддерживать ассоциативный массив ключей и делать вставку для измерения, только если ключа в массиве еще нет. 2) insert all + row_number для каждого из измерений. Требует N аналитических сортировок. Вставка в соответствующее измерение если rn = 1 для него. 3) insert into fact + N insert distinct into dimension. Трубует N сканирований исходной широкой таблицы и N hash/sort для distinct. 4) unpivot так чтобы для фактов и всех измерений была отдельная одна строка + distinct. Так вот, певый вариант уступает остальным из-за context switch, не смотря на то, что варианты 2-4 требуют сортировок и дополнительных телодвижений. Кстати, задача очень популярна в разных конторах, даже когда-то думал написать об этом статью, но потом обломался расписывать все детали. А без них целостной картины не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 15:16 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
Vintмегамозг, приведи пример. ты путаешься в терминологии. Ну смотри, хочу я определить табличную функцию (не конвейерную), чтобы использовать ее в кляузе фром селекта. Код: plsql 1. Сигнатура такая, к примеру Код: plsql 1. 2. 3. 4. 5. 6. 7. Я , так понимаю, не могу ее в пакете определить, она должна быть автономной, если тип mytype_t - это что-то навроде Код: plsql 1. 2. И сами типы не могут быть определены в пакете, в котором определена функция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 15:54 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, да все я понимаю, в каждом правиле всегда есть исключения. ну лениво дописывать в каждом утверждении в конце "В 99% случаев"... мегамозг, через pipelined функцию использовать pl\sql пакеты можно. там создадутся sql типы автоматически (до версии 12с). в 12с может быть и так можно. не знаю - не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 16:10 |
|
||
|
Движки SQL и PL
|
|||
|---|---|---|---|
|
#18+
[quot мегамозг]Подскажите, в коде из статьи Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. данные засовываются в какую-то коллекцию типа id_list. Что это за тип должен быть, вложенная таблица или что-то иное? Код: plsql 1. 2. 3. это подтверждает. То есть за ранее создали пакет и объявили типы для наиболее часто встречающихся массивов: даты, id и т.п. Вот рекомендация из книги Стивена Фейерштейна и Билла Прибыл: Вместо того чтобы создавать набор определений TYPE коллекций, различающихся только по имени и разбросанных по всему приложению, стоит рассмотреть возможность создания одного пакета с набором заранее определенных, стандартных типов коллекций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 16:44 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39466886&tid=1885800]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 509ms |

| 0 / 0 |
