Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Допы 2012.docx
Скачиваний:
11
Добавлен:
24.09.2019
Размер:
125.27 Кб
Скачать
  1. "Определить ближайший к заданной дате год, когда 29 февраля придется на воскресенье. "

UNDEFINE startdate;

SELECT TO_CHAR(DateL, 'YYYY')

FROM

(

SELECT TO_DATE('&&startdate') - 1 + level DateL , level

FROM dual

CONNECT BY LEVEL < 11000

)

WHERE TO_CHAR(DateL, 'dd-mm') = '29-02'

AND TO_CHAR(DateL, 'day') = 'воскресенье'

AND rownum < 2

Вообще, можно использовать и более точное число (10958). Получается оно вот откуда: есть

некий алгоритм судного дня, который, среди прочего, говорит о том, что каждый год происходит

смещение дня недели вперед на один день (в високосный - на два). То есть каждый цикл между високосными

годами происходит смещение на пять дней вперед (что эквивалентно смещению на два дня назад).

Таким образом, день недели совпадет через 7 циклов, что соответствует 7*4 = 28 лет.

28*365 + 7 (7 - високосные дни). Также, в 1700, 1800, 1900 годах високосного не было, и промежуток

между високосными годами был шесть лет. Прибавим еще два года к числу:

28* 365 + 7 + 365*2 ~ 11 000

Описание отправлялось на почту.

  1. 11absd1

11ogkem2

25plt2

250gem1

сортировать,чтобы сначала сортировака по числам, и если числа одинаковые, то сортировка по буквам

два варианта

select str

from tab1

ORDER BY TO_NUMBER(REPLACE(TRANSLATE(STR, 'qwertyuioplkjhgfdsazxcvbnm', ' '), ' ')),

REPLACE(TRANSLATE(STR, '0123456789', ' '), ' ')

select str

from tab1

order by to_number(replace(str, ltrim(str, '0123456789'))),

ltrim(str, '0123456789')

  1. В таблицу записана информация об удачных и неудачных попытках подключения к базе данных.

(Пользователь, Время, Удачно/неудачно) Требуется получить список пользователей которые совершили подряд три неудачные попытки подключения.

create table Connected

(USERS varchar2(30),

DATE_CON date,

RESULT varchar(4));

commit;

insert into Connected values ('andsko', sysdate, 'fail');

insert into Connected values ('andsko', sysdate, 'fail');

insert into Connected values ('andsko', sysdate, 'ok');

insert into Connected values ('andsko', sysdate, 'fail');

insert into Connected values ('andsko', sysdate, 'fail');

insert into Connected values ('andsko', sysdate, 'ok');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'ok');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('ivapopo', sysdate, 'fail');

insert into Connected values ('trolface', sysdate, 'fail');

insert into Connected values ('trolface', sysdate, 'fail');

insert into Connected values ('trolface', sysdate, 'fail');

insert into Connected values ('petmis', sysdate, 'fail');

insert into Connected values ('petmis', sysdate, 'fail');

insert into Connected values ('trolface', sysdate, 'ok');

insert into Connected values ('petmis', sysdate, 'fail');

select distinct tab1.USERS

from (select USERS, DATE_CON, RESULT, rownum r

from (select USERS, DATE_CON, RESULT, rownum z from Connected

order by USERS, z) order by r) tab1

left join

(select USERS, DATE_CON, RESULT, rownum r

from (select USERS, DATE_CON, RESULT, rownum z from Connected

order by USERS, z) order by r) tab2

on tab1.USERS = tab2.USERS and tab1.r = tab2.r - 1

left join

(select USERS, DATE_CON, RESULT, rownum r

from (select USERS, DATE_CON, RESULT, rownum z from Connected

order by USERS, z) order by r) tab3

on tab1.USERS = tab3.USERS and tab1.r = tab3.r - 2

where tab1.RESULT = 'fail' and tab2.RESULT = 'fail' and tab3.RESULT = 'fail';

  1. Для таблицы схемы, имеющих индексы вывести:

1)имя таблицы

2)имя первого(по алфавиту неуникального индекса)

3)количество столбцов первого неуникального индекса

4)имя первого(по алфавиту) уникального индекса

5)количество столбцов первого уникального индекса

6)общее число неуникальных индексов

7)общее число уникальных индексов

with NonUnInd as

--неуникальные индексы с количеством столбцов в каждом

(select sNONUNIQUE.Table_name as t, sNONUNIQUE.Index_name as i, sIND_COL.cntI as s

from

(select Table_name, Index_name

from (select Table_name, min(r1) mr1

from (select Table_name, Index_name, rownum r1

from user_indexes

where uniqueness like 'NONUNIQUE'

order by Table_name, Index_name)

group by Table_name) s1

left join

(select Index_name, rownum r2

from user_indexes

where uniqueness like 'NONUNIQUE'

order by Table_name, Index_name) s2

on s1.mr1=s2.r2) sNONUNIQUE

left join

(select Index_name, count(Index_name) as cntI

from user_ind_columns

group by Index_name) sIND_COL

on sNONUNIQUE.Index_name = sIND_COL.Index_name),

------------------------уникальные индексы с количеством столбцов в каждом

UnInd as

(select sUNIQUE.Table_name as t, sUNIQUE.Index_name as i, sIND_COL.cntI as s

from

(select Table_name, Index_name

from (select Table_name, min(r1) mr1

from (select Table_name, Index_name, rownum r1

from user_indexes

where uniqueness like 'UNIQUE'

order by Table_name, Index_name)

group by Table_name) s1

left join

(select Index_name, rownum r2

from user_indexes

where uniqueness like 'UNIQUE'

order by Table_name, Index_name) s2

on s1.mr1=s2.r2) sUNIQUE

left join

(select Index_name, count(Index_name) as cntI

from user_ind_columns

group by Index_name) sIND_COL

on sUNIQUE.Index_name = sIND_COL.Index_name),

--------------------общее количество неуникальных

aCountNon as (select Table_name, count(index_name) as co

from user_indexes

where uniqueness like 'NONUNIQUE'

group by Table_name),

---------------------общее количество уникальных

aCountUn as (select Table_name, count(index_name) as co

from user_indexes

where uniqueness like 'UNIQUE'

group by Table_name)

select s1.Table_name as "Table_name", n.i as "First ununque", n.s as "Count of columns FNUI",

u.i as "First unque", u.s as "Count of columns FUI", aC.co as "Count of Nonunique Index",

aC2.co as "Count of Unique Index"

from (select Distinct Table_name from user_indexes) s1

left join NonUnInd n on s1.Table_name = n.t

left join UnInd u on s1.Table_name = u.t

left join aCountNon aC on s1.Table_name = aC.Table_name

left join aCountUn aC2 on s1.Table_name = aC2.Table_name;