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 для ускорения обучения нейронных сетей
Комментариев нет:
Отправить комментарий