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

define data='3-1-2009'

Select VotedDay as "VotedDay",

trunc(months_between(VotedDay,TO_DATE('&&data', 'DD MM YYYY'))/12) as "Year",

trunc(months_between(VotedDay,TO_DATE('&data', 'DD MM YYYY'))

- 12* trunc(months_between(VotedDay,TO_DATE('&data', 'DD MM YYYY'))/12))

as "Month",

VotedDay- add_months( TO_DATE('&data', 'DD MM YYYY'),

months_between(VotedDay,TO_DATE('&data', 'DD MM YYYY')))

as "Day"

from

(SELECT

CASE WHEN TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),1)),'DD'))-29=0

THEN NEXT_DAY(NEXT_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),10),2), 1)

WHEN TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),13)),'DD'))-29=0

THEN NEXT_DAY(NEXT_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),22),2), 1)

WHEN TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),25)),'DD'))-29=0

THEN NEXT_DAY(NEXT_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),34),2), 1)

Else

NEXT_DAY(NEXT_DAY(ADD_MONTHS(TRUNC(TO_DATE('&data', 'DD MM YYYY'),'YEAR'),46),2), 1)

end as VotedDay

FROM dual)

  1. Дана таблица из двух столбцов: 1 - строка, 2 – число. Требуется написать запрос, в результате

которого каждая строка таблицы выдавалась бы столько раз, сколько определено для неё во втором столбце.

Решение

drop table dop2;

create table dop2 (colString varchar2(10), colNumber number(3));

insert into dop2 values('apple',4);

insert into dop2 values( 'melon',2);

insert into dop2 values('banana',1);

select * from dop2;

select colString

from

(select rownum numberRow from all_objects where rownum <= (select max(colNumber) from dop2)) OrderTable

join dop2

on colNumber >= OrderTable.numberRow

  1. Для всех связей между таблицами схемы вывести: - Имя главной таблицы; - Имя подчиненной таблицы; - Имя первого столбца первичного ключа; - Имя второго столбца первичного ключа; - Общее число столбцов первичного ключа; - Имя первого столбца вторичного ключа; - Имя второго столбца вторичного ключа;

select tblForeignKey.table_Parent, tblForeignKey.table_Child,

tblPrimaryKey.colPrimaryKey1, tblPrimaryKey.colPrimaryKey2,tblPrimaryKey.colCount,

tblForeignKey.colForeignKey1,tblForeignKey.colForeignKey2

from

(SELECT uc.table_name,

max(CASE WHEN position = 1 THEN column_name END) colPrimaryKey1,

max(CASE WHEN position = 2 THEN column_name END) colPrimaryKey2, max(position) colCount

FROM user_constraints uc, user_cons_columns ucc

WHERE uc.constraint_name = ucc.constraint_name

AND uc.constraint_type = 'P'

GROUP BY uc.table_name) tblPrimaryKey

JOIN

(SELECT aa.table_name table_Parent, bb.table_name table_Child, aa.colForeignKey1, aa.colForeignKey2

FROM

(SELECT uc.table_name,

r_constraint_name,

max(CASE WHEN position = 1 THEN column_name END) colForeignKey1,

max(CASE WHEN position= 2 THEN column_name END) colForeignKey2

FROM user_constraints uc, user_cons_columns ucc

WHERE uc.constraint_name = ucc.constraint_name

AND uc.constraint_type='R'

GROUP BY uc.table_name, r_constraint_name) aa

JOIN

(SELECT table_name,

constraint_name

FROM user_constraints

WHERE constraint_type = 'P') bb

ON aa.r_constraint_name=bb.constraint_name

) tblForeignKey

on (tblPrimaryKey.table_name=tblForeignKey.table_Parent);