Oracle - Функции RANK() и DENSE_RANK() (Или учимся выбирать необходимые значения внутри множественной выборки)

Начнем с функции RANK(). С объяснения для чего она и в каких случаях она нам может пригодиться.

Функция RANK() — это очень полезная функция, она позволяет нам пронумеровать набор по некоторому группирующему значению внутри всего выбранного набора данных. Проще всего показать это на примере. Для этого создадим небольшую таблицу:

ID	PERSON	DT			SM

1	Роман	01.10.2016 11:51:31	545.3
2	Роман	01.10.2016 11:51:31	445.2
3	Роман	01.10.2016 11:51:31	145.3
4	Кирил	01.05.2016 16:51:31	99.5
5	Алена	01.07.2016 12:51:31	445.3
6	Роман	01.12.2016 16:51:31	876.1
7	Кирил	01.06.2016 16:51:31	237.22
8	Алена	01.12.2016 16:51:31	145.3
9	Алена	01.02.2016 14:51:31	534.7
10	Роман	01.03.2016 16:51:31	165.3
11	Кирил	01.04.2016 16:51:31	345.2


Пусть в этой таблице будет содержать некоторые выставленные счета разным пользователям PERSON на разные суммы SM в разное время DT.

Подробнее

Размер Таблиц и Tablespace в Oracle

Узнаем сколько занимает каждый TableSpace:
(Размер указан в мегабайтах)

select a.tablespace_name, totalspace, nvl(freespace,0) freespace,
   (totalspace-nvl(freespace,0)) used,
  ((totalspace-nvl(freespace,0))/totalspace)*100 "%USED"
from
  (select tablespace_name, sum(bytes)/1048576 totalspace
   from dba_data_files
   group by tablespace_name) a,
  (select tablespace_name, sum(Bytes)/1048576 freespace
   from dba_free_space
   group by tablespace_name) b
where a.tablespace_name = b.tablespace_name (+)
  and ((totalspace-nvl(freespace,0))/totalspace)*100 > 90
 order by 5 desc


Теперь узнаем сколько занимают таблицы в указанном TableSpace:
(Размер в мегабайтах, имя нужного TableSpace - берем из результатов предыдущего запроса, для всех при больших базах может выполняться долго)

select de.owner, de.segment_name, sum(de.bytes)/1048576, de.segment_type from dba_extents de
 where de.owner in ('нужный tablespace')
group by de.owner, de.segment_name, de.segment_type
Подробнее

Русские буквы в SQLPlus под Windows

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

Итак, если видим кракозябры вместо букв, то делаем:

1. Смотрим что у нас с NLS_LANG в реестре. Должно быть:

HKLM\Software\Oracle\Home0\NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251

Скорее всего, там RUSSIAN_RUSSIA - меняем.


2. Деламе батник которым будем запускать SQLPlus:

@mode con cp select=1251
@sqlplus
@exit


Всё.
Запускаем, при помощи bat файла, SQLPlus  и радуемся русским буквам. :)

Подробнее