SQL макросы
Текст макроса подставляется в результирующий запрос.
Можно рассматривать как параметризованную вью
CREATE FUNCTION budget(job VARCHAR2, t DBMS_TF.table_t) RETURN VARCHAR2 SQL_MACRO IS BEGIN RETURN q'{SELECT deptno, SUM(sal) budget FROM t WHERE job = budget.job GROUP BY deptno}'; END; SELECT * FROM budget('MANAGER', scott.emp);
Расширение возможности циклов
* шаг:
FOR n NUMBER(5,1) IN 1.0 .. 3.0 BY 0.5 LOOP* направление:
FOR i IN REVERSE 1..3 LOOP* вложенные циклы в 1 конструкции с условием выхода (WHILE)
FOR i IN 1, REPEAT i*2 WHILE i < 100 LOOP* итерация по динамическому sql
FOR r rec_t IN VALUES OF (EXECUTE IMMEDIATE cursor_str) WHEN r.employee_id < 103 LOOPДанные считываются порциями (bulk collect) - экономия памяти, вместо попытки вычитать таблицу целиком и уменьшение смены контекста, вместа построчного чтения
* условия в цикле (WHEN):
FOR power IN 2, REPEAT power*2 WHILE power <= 64 WHEN MOD(power, 32)= 0 LOOP
Именованные окна
select ename, deptno, sal, sum(sal) over (w1 order by sal) cum_sal1, sum(sal) over (w2) cum_sal2 from emp window w1 as (partition by deptno), w2 as (w1 order by sal);
Поддержка возможности исключения строки/группы (exclude current row) и возможность задания окна не только в кол-ве строк, но и групп (groups between)
select sal, sum(sal) over (w groups between 1 preceding and 1 following exclude current row) as exclude_current_row from emp window w as (order by sal);
Json тип данных в таблицах
json будет хранится уже в разобранном дереве
CREATE TABLE j_purchaseorder (id VARCHAR2 (32) NOT NULL PRIMARY KEY, date_loaded TIMESTAMP (6) WITH TIME ZONE, po_document JSON);+ ускорение выборки части json
+ модификации части документа (JSON_TRANSFORM )
- замедление вставки
- лишняя нагрузка, если обработка не происходит в бд
Создание типов с колонками pl/sql типов (boolean, PLS_INTEGER)
но они должны быть созданы с директивой "NOT PERSISTABLE" - значит, что не могут быть сохранены, существуют только в памяти
CREATE TYPE tab_bool AS TABLE OF (BOOLEAN) NOT PERSISTABLE;
Инициализации объекта циклом с набором преобразовании прямо в конструкторе
result := vec_t (FOR i IN 1.n => 2*i);
Blockchain таблицы
CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), deposit_date DATE, deposit_amount NUMBER) NO DROP UNTIL 31 DAYS IDLE NO DELETE LOCKED HASHING USING "SHA2_512" VERSION "v1";Особенности:
* только вставка
* цепочка подтверждается как: hash(row N) = hash(row data N & hash(N-1))
что гарантирует невозможность подмены данных
ML
* поддержка XGBoost для классификации и регрессии
* оптимизатор Adam для ускорения обучения нейронных сетей
Комментариев нет:
Отправить комментарий