Skip to content

Instantly share code, notes, and snippets.

View aykononov's full-sized avatar

Aleksandr Kononov aykononov

  • Russia, Saint Petersburg
  • 19:18 (UTC +03:00)
View GitHub Profile
@aykononov
aykononov / random1000.sql
Last active February 18, 2020 13:28
Вывести 1000 случайных чисел от 1 до 1000, таких, что не повторяются в этой последовательности, больше чем 3 раза.
SELECT t2.rnum
FROM (SELECT t.rnum,
RANK() OVER(PARTITION BY t.rnum ORDER BY(1)) rnk
FROM ( SELECT trunc(dbms_random.value(1, 1000)) AS rnum
FROM dual
CONNECT BY LEVEL <= 1000) t
) t2
WHERE t2.rnk < 4;
@aykononov
aykononov / delete_duplicates.sql
Last active April 7, 2020 14:19
Удалить дубликаты из таблицы.
/*
Имеется таблица без первичного ключа. Известно, что в таблице имеется задвоение данных.
Необходимо удалить дубликаты из таблицы.
create table t (a number, b number);
Пример данных:
a b
1 1
2 2
@aykononov
aykononov / xml_1.sql
Last active April 7, 2020 14:21
Выборка из XML.
/*
Имеется
xmltype('
<root>
<row>
<col>v11</col>
<col>v12</col>
<col>v13</col>
<col>v14</col>
</row>
@aykononov
aykononov / xml_2.sql
Last active April 7, 2020 14:29
Выборка из XML не используя XSLT.
/*
Имеется:
xmltype('
<root>
<row>
<col>v11</col>
<col>v12</col>
<col>v13</col>
<col>v14</col>
@aykononov
aykononov / xml_3.sql
Last active April 7, 2020 14:31
Выборка из XML с помощью XSLT.
/*
Имеется:
xmltype('
<root>
<row>
<col>v11</col>
<col>v12</col>
<col>v13</col>
<col>v14</col>
@aykononov
aykononov / collections.sql
Last active April 7, 2020 14:34
BULK COLLECT
/*
Имеется декларация типа:
CREATE OR REPLACE TYPE TNUM as table of number;
Необходимо написать реализацию функции, возвращающую в качестве результата заполненный массив
имеющий тип TNUM с значениями от 1..1000
*/
CREATE OR REPLACE NONEDITIONABLE FUNCTION fnc_get_tnum
/*
Задана строка '1,2,3,4', необходимо, используя регулярные выражения в запросе получить результат:
C1 C2 C3 C4
-- -- -- --
1 2 3 4
*/
SELECT regexp_substr(t.str,'[^,]+',1,1) as c1,
regexp_substr(t.str,'[^,]+',1,2) as c2,
@aykononov
aykononov / fnc_PIPELINED.sql
Last active April 7, 2020 13:26
Метод PIPELINED.
/* Метод pipelined.
Имеется таблица dept со следующей структурой:
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
@aykononov
aykononov / work_30days.sql
Last active April 7, 2020 13:22
Вывод, только рабочих дней на следующие 30 дней.
-- Вывод, только рабочих дней на следующие 30 дней.
SELECT *
FROM (
SELECT TRUNC(SYSDATE -1) + LEVEL ToDate,
to_char((TRUNC(SYSDATE -1) + LEVEL),'DY') AS ToDay
FROM dual CONNECT BY LEVEL <= 30
)
WHERE ToDay NOT IN ('СБ','ВС');
@aykononov
aykononov / lag_lead_dates.sql
Last active November 11, 2019 13:34
LAG и LEAD аналитические функции
/* Выводит предыдущее, текущее и последующее значение даты */
WITH t AS (SELECT TRUNC(SYSDATE-1) + LEVEL sdate FROM dual CONNECT BY LEVEL <= 10 ORDER BY TRUNC(SYSDATE))
SELECT
LAG(t.sdate) OVER(ORDER BY t.sdate) prev_date
,t.sdate
,LEAD(t.sdate) OVER(ORDER BY t.sdate) next_date
FROM t;