powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Движки SQL и PL
25 сообщений из 31, страница 1 из 2
Движки SQL и PL
    #39466249
Фотография Banks Analytics
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навеяно статьей на хабре.
PL/SQL и SQL выполняются на разных движках.
Дабы избежать множество переключений контекстов при выполнении кода необходимо, при возможности, оптимизировать код соответствующим образом.
Например когда в коде "доходим" до UPDATE, а у него условие с функцией NVL (которая относится к PL/SQL). Поэтому её рекомендуют заменить на COALESCE, встроенную в SQL движок.
Логично. Но вопрос. Где можно посмотреть описание какие вещи относятся именно к PL/SQL, а какие к SQL? Скиньте кому встречалось.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466260
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466266
Фотография Banks Analytics
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Ryndin,
Оператор FORALL не вызовет переключений контекстов. Но что здесь еще плохо. Правильно это NVL. NVL — это функция PL/SQL, следовательно снова будет переключение кон текстов. Поэтому ее следует заменить на COALESCE или оператор CASE.
https://habrahabr.ru/post/124948/
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466271
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 лет назад).
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466272
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Banks Analytics,

Не надо читать технические статьи на том ресурсе, они не точно бесполезны, они крайне вредны.

Хотя я не знаю за все направления, может там есть вменяемые авторы, но все что я встречал касательно программированию в Oracle было полный шлак.
То, что попадалось касательно BI, columnar databases, BigData, MPP, etc было просто дилетантство.
Когда автор упрощает не искажая - это очень хорошо, когда появляются искажения - лучше их озвучивать либо вообще не писать ничего.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466274
Фотография Banks Analytics
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopBanks Analytics,

Не надо читать технические статьи на том ресурсе, они не точно бесполезны, они крайне вредны.

Ок. Приму к сведению. спасибо.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466292
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466293
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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...
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466295
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir FilinIn PL/SQL expressions, you can use all SQL functions except...А ты предыдущие ответы в теме читаешь перед тем как постить?
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466303
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
не серчай, поленился, не кликнул...
Интересно, откуда "это" пошло - про NVL? Уже не первый раз встречаю
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466305
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Filin,

Я не встречал подобных теорий. Возможно, писатель с хабра создает много шума в определенных кругах.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466429
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, в коде из статьи
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE PROCEDURE upd_for_dept (
dept_in IN employee.department_id%TYPE
,newsal_in IN employee.salary%TYPE)
IS
deptlist id_list;
BEGIN
SELECT employee_id
BULK COLLECT INTO deptlist
FROM employee WHERE department_id = dept_in;


данные засовываются в какую-то коллекцию типа id_list.
Что это за тип должен быть, вложенная таблица или что-то иное?
Код: plsql
1.
create type id_list is table of employee.employee_id%type;


И почему процедуры и типы в примере не в пакете?
В видеокурсе от "специалиста" всё такое рекомендовалось в пакеты упаковывать.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466492
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозг,
авторКоллекция создается следующим образом:
CREATE TYPE id_list IS TABLE OF INTEGER;
* This source code was highlighted with Source Code Highlighter.


имхо,статья странная, не стоит сильно перениматся

......
stax
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466567
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

Т.е. разница в скорости действительно может быть, но она никак не связана с типом движка.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466662
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозгИ почему процедуры и типы в примере не в пакете?
В видеокурсе от "специалиста" всё такое рекомендовалось в пакеты упаковывать.

Не обязательно в пакеты всё включать. Можно процедуры и функции создать отдельно, исходя из каких-либо соображений. Например, необходимости постоянной валидности процедуры вне зависимости от пакетов.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466668
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Filin,
извините, телефон заглючил, что ли... Это из другой темы :(
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466671
Vladimir Filin,

Какие еще могут быть причины помимо идеологических(сгруппировать по какому-то принципу, корп.стандарты и т.п.)?
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466690
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрошатель2Какие еще могут быть причины помимо идеологических
Независимость от пакетов. Реальный пример: pl/sql-хэндлер CQN. Его невалидность может приводить к необходимости его дропа и создания вновь. Не всегда так, но бывает. Сделал его независимой процедурой.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466788
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimВ отличие от обычных табличных функций, конвейерные табличные функции могут быть определены с использованием типов "table" и "record", определенных в спецификации пакета.
Я правильно понимаю, что в пакете можно определить табличную функцию, возвращающую тип "table" или "record", при этом тип является автономным.
Или и функция, и тип должны быть автономными?
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466797
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного оффтоп
dbms_photoshop,
скорее всего непонимание идет еще с тех времен когда у sql в pl\sql и отдельно - были разные движки.(помнишь дисскуссию про 8.1.7 и deciode :) ) там и аналитика не работала и много чего не было.
Лично я считаю что переключение контекста вообще не страшная операция, намного страшнее нетранзакционность результата выполнения ufc в sql. хотя большая часть програмистов не задумывается над этим,а вылавливать потом такие ошибки очень мучительно.
и насчет хабра абсолютно согласен - бесполезный ресурс для специалиста. ни одной серьезной статьи по ораклу не было. хотя читал подавляющее большинство.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466799
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозг,
приведи пример. ты путаешься в терминологии.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466886
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 требуют сортировок и дополнительных телодвижений.

Кстати, задача очень популярна в разных конторах, даже когда-то думал написать об этом статью, но потом обломался расписывать все детали. А без них целостной картины не будет.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466954
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintмегамозг,
приведи пример. ты путаешься в терминологии.
Ну смотри, хочу я определить табличную функцию (не конвейерную), чтобы использовать ее в кляузе фром селекта.
Код: plsql
1.
select * from table; (uf_GetData)


Сигнатура такая, к примеру
Код: plsql
1.
2.
3.
4.
5.
6.
7.
FUNCTION uf_GetData
  return mytype_t IS
  retval mytype_t;
BEGIN
  SELECT * BULK COLLECT INTO retval FROM TBL_MyTable;
    RETURN retval;
END uf_GetTickers_2;


Я , так понимаю, не могу ее в пакете определить, она должна быть автономной, если тип mytype_t - это что-то навроде
Код: plsql
1.
2.
-- 1) TYPE  mytype_t is table of TBL_MyTable%ROWTYPE;
-- 2) TYPE  mytype_t is table of recordset_o, где  recordset_o - объектный тип


И сами типы не могут быть определены в пакете, в котором определена функция?
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39466983
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
да все я понимаю, в каждом правиле всегда есть исключения. ну лениво дописывать в каждом утверждении в конце "В 99% случаев"...

мегамозг,
через pipelined функцию использовать pl\sql пакеты можно. там создадутся sql типы автоматически (до версии 12с).
в 12с может быть и так можно. не знаю - не проверял.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467037
Фотография Banks Analytics
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot мегамозг]Подскажите, в коде из статьи
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE PROCEDURE upd_for_dept (
dept_in IN employee.department_id%TYPE
,newsal_in IN employee.salary%TYPE)
IS
deptlist id_list;
BEGIN
SELECT employee_id
BULK COLLECT INTO deptlist
FROM employee WHERE department_id = dept_in;


данные засовываются в какую-то коллекцию типа id_list.
Что это за тип должен быть, вложенная таблица или что-то иное?
Код: plsql
1.
2.
3.
create type id_list is table of employee.employee_id%type;

Тоже обратил на это внимание. И да, думаю что данные за ранее засунули в ассоциированный массив с типом PLS_INTEGER. Само название "id_list" как бы говорит за себя что подразумеваются столбец ID, а далее [SRC PLSQL]SELECT employee_id INTO deptlist

это подтверждает.
То есть за ранее создали пакет и объявили типы для наиболее часто встречающихся массивов: даты, id и т.п.

Вот рекомендация из книги Стивена Фейерштейна и Билла Прибыл:
Вместо того чтобы создавать набор определений TYPE коллекций, различающихся только по имени и разбросанных по всему приложению, стоит рассмотреть возможность создания одного пакета с набором заранее определенных, стандартных типов коллекций.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Движки SQL и PL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]