Oracle - Фичи и полезности (Часть №1)

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

1. Получаем список всех полей интересующей нас таблицы.
select  column_name 
  from user_tab_columns 
  where upper(table_name) = upper('название_таблицы')


2. Меняем формат даты по умолчанию в сессии.
alter session set NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';
— Пока сессия не закрыта, будет действовать установленный таким образом формат.

3. Создаем партиционированную таблицу.
(каждый месяц в новой партиции, при большом объёме данных сильно ускоряет выборки)
(вообще данная тема очень обширна, с большими возможностями но здесь лишь краткий пример)
create table 
table_data_part ( 
   dt        DATE
) 
PARTITION BY RANGE (dt) 
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
(  
   PARTITION initial VALUES LESS THAN (TO_DATE('1-7-2007', 'DD-MM-YYYY')) 
);
Для данной таблицы данные за каждый месяц, начиная с 1 юиля 2017 года, будут храниться в отдельной партиции. При этом создаваться они будут автоматически.

4. Оставляем только символы в строке.
select regexp_replace('Входная строка 12','[^[[:alpha:]]]*') from dual;

Результат:
"Входнаястрока"


5. Оставляем только цифры в строке.
select regexp_replace('Входная строка 12','[^[[:digit:]]]*') from dual;

Результат:
"12"


(На этом пока всё, когда наберется слишком длинный на мой взгляд список, начну часть №2)

2 комментария

avatar
Пример получения возраста из дня рождения в Oracle
trunc((sysdate - vcpa.Birthday) / 365)
avatar
Округление значения до двух знаков после запятой (копеек) в меньшую сторону (в Oracle)
p_res := round((floor(p_sum*100))/100,2);
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.