Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лёшка / Маркин Тест 3 / SQL / Ответы (6)

.doc
Скачиваний:
26
Добавлен:
15.04.2015
Размер:
64.51 Кб
Скачать

1) Каким образом можно создать и использовать пользовательское исключение?

Ответ: Исключение может быть сначала создано (с помощью запроса CREATE EXCEPTION), а затем вызвано, или же сразу сгенерировано с сообщением, задаваемым непосредственно в операторе вызова исключения.

2) Какой оператор используется для выхода из текущего цикла, а также для перехода на метку:

Ответ: LEAVE

3) Какие из четырех типов переменных (локальные переменные, контекстные переменные, входные параметры и выходные параметры) могут использоваться в хранимых процедурах, а какие – в триггерах?

Ответ: Локальные переменные могут использоваться везде, большинство контекстных переменных используются только в триггерах, а входные параметры и выходные параметры используются только в хранимых процедурах

4) Создать хранимую процедуру для вывода количества ремонтных заявок, на выполнение которых назначен исполнитель, чья фамилия начинается с заданной буквы. Результат представить в виде: код исполнителя, фамилия исполнителя, количество ремонтных заявок.  CREATE PROCEDURE proc_exec(firstchar VARCHAR(1))RETURNS (executorcd INTEGER, fio_exec VARCHAR(30), count_req INTEGER)

AS

BEGIN

Выберите операторы для продолжения текста процедуры:

Ответ:б) FOR SELECT e.executorcd, e.fio, count(r.requestcd) FROM  executor e, request r

WHERE SUBSTRING(fio FROM 1 FOR 1)=:firstchar AND e.executorcd=r.executorcd

GROUP BY executorcd, fio INTO :executorcd, :fio_exec, :count_req

DO SUSPEND;

END

5) Создана процедура, которая выводит данные об абонентах, даты оплаты которых больше одной из заданных дат и меньше другой:

CREATE PROCEDURE abs(d1 date,d2 date) returns (AccCd varchar(6),fio varchar(20),st varchar(20), houseno integer, flat integer)

as

begin

Продолжите текст процедуры:

Ответ: а) for select a.accountcd, a.fio, (select streetnm from street where streetcd=a.streetcd), a.houseno,a.flatno from abonent a where a.accountcd in (select accountcd from paysumma where paydate<=:d1 and paydate >=:d2) into :AccCd,:fio,:st,:houseno,:flat do suspend;end

6) Создать хранимую процедуру, которая для всех абонентов, чья фамилия начинается с заданной буквы, увеличивает значения всех начисленных сумм на 50.

CREATE PROCEDURE alter_nachisl(firstchar VARCHAR(1))

AS BEGIN 

Выберите операторы для продолжения текста процедуры:

Ответ: в) UPDATE nachislsumma SET nachislsum=nachislsum+50

WHERE accountcd IN (SELECT accountcd FROM abonent

WHERE SUBSTRING(fio FROM 1 FOR 1)=:firstchar);

END

7) Создана процедура изменения даты подачи всех ремонтных заявок заданного абонента на новую дату.

create procedure my_proc16 (abfio varchar(20), incdate date) as begin

Выберите операторы для продолжения текста процедуры:

Ответ: а) update request r

set r.incomingdate=:incdate

where r.accountcd in (select a.accountcd from abonent a where a.fio=:abfio);

end

8) Создать хранимую процедуру, которая выводит общую сумму оплат заданного абонента за заданный год. Результат представить в виде:  номер лицевого счета абонента, общая сумма оплат, год, за который произведена оплата. 

CREATE PROCEDURE pay_year(account VARCHAR(30), p_year SMALLINT)

RETURNS (accountcd VARCHAR(30), sum_year NUMERIC(15,4), payyear SMALLINT)

AS BEGIN

Выберите операторы для продолжения текста процедуры:

Ответ: б) FOR SELECT accountcd, sum(paysum), payyear FROM  paysumma WHERE accountcd=:account

GROUP BY accountcd, payyear

INTO :accountcd, :sum_year, :payyear

DO SUSPEND;

END

9) Создать процедуру для вывода общей суммы начислений абонента с заданным номером лицевого счета. Результат представить в виде: номер лицевого счета абонента, ФИО абонента, общая сумма его начислений. CREATE PROCEDURE proc(account VARCHAR(30)) RETURNS (Accountcd VARCHAR(30), Fio VARCHAR(30),s_nach NUMERIC(15,4)) AS BEGIN  Выберите операторы для продолжения текста процедуры:

Ответ: в) FOR SELECT a.accountcd, a.fio, SUM(n.nachislsum) FROM abonent a,  nachislsumma n

WHERE  a.accountcd=:account AND a.accountcd=n.accountcd

GROUP BY a.accountcd, a.fio INTO :accountcd, :fio, :s_nach

DO SUSPEND;

END

10) Создать процедуру для вывода информации об абонентах, общая сумма начислений которых превышает конкретную сумму. Результат представить в виде: номер лицевого счета абонента, фамилия, номер телефона, общая сумма его начислений.    

CREATE PROCEDURE nach_sum(summa NUMERIC(15,4))

RETURNS (accountcd VARCHAR(30), fio VARCHAR(30), phone VARCHAR(15),sum_nach NUMERIC(15,4))

AS BEGIN 

Выберите операторы для продолжения текста процедуры:

Ответ: а) FOR SELECT a.accountcd, a.fio, a.phone, sum(n.nachislsum)

FROM abonent a, nachislsumma n WHERE  a.accountcd=n.accountcd

GROUP BY a.accountcd, a.fio, a.phone HAVING sum(n.nachislsum)>:summa INTO :accountcd, :fio, :phone, :sum_nach

DO SUSPEND;

END

11) Чем могут вызываться хранимые процедуры?

Ответ: всё вышеперечисленное

12) Создана процедура для вывода ФИО абонента и полного адреса: название улицы, д. дом, кв. квартира(FUL_ADR).

create procedure my_proc21

returns (Afio varchar(20), Adres varchar(50))

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: среди перечисленных вариантов нет правильного

13) Создана процедура для уменьшения на заданный процент сумм начислений по заданному коду услуги.

create procedure my_proc14 (kodserv integer, chislo numeric(18,4))

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: update nachislsumma

set nachislsum = nachislsum *(1- :chislo)

where servicecd=:kodserv;

end

14) Что такое хранимая процедура?

Ответ: б) это скомпилированная программа произвольной длины на процедурном языке SQL, которая хранится в БД как часть метаданных

15) Создана процедура установления заданного исполнителя для всех ремонтных заявок с заданной неисправностью

create procedure my_proc17 (execfio varchar(20), nmfail varchar(50))

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: б) update request r

set r.executorcd = (select e.executorcd from executor e where e.fio= :execfio)

where r.failurecd in (select d.failurecd from disrepair d where d.failurenm= :nmfail);

end

16) Для удаления хранимой процедуры используется запрос:

Ответ: б) DROP PROCEDURE

17) В учебной БД создана хранимая процедура, которая удаляет данные об абонентах , в чьих фамилиях больше заданного числа символов. 

CREATE PROCEDURE delete_abonent (chislo INTEGER)

AS BEGIN DELETE FROM abonent WHERE CHAR_LENGTH(fio)>:chislo; END  Предпринимается попытка выполнить процедуру с помощью следующего запроса: 

EXECUTE PROCEDURE delete_abonent(10)

Будет ли выполнен данный запрос:

Ответ: а) нет

19) Для определения количества оплат в каждом месяце по заданной услуге разработана процедура

create procedure my_proc12 (nameserv varchar(30))

returns (Ppayyear smallint, Ppaymonth smallint, Pcount integer)

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: а) for select payyear, paymonth, count(payfactcd)

from Paysumma p, Services s

where p.servicecd = s.servicecd and s.servicenm=:nameserv

group by payyear,paymonth

into :Ppayyear, :Ppaymonth, :Pcount

do suspend;

end

20) Создана хранимая процедура с помощью следующей инструкции: 

CREATE PROCEDURE proc_disrep(firstchar VARCHAR(1)) RETURNS (failurecd INTEGER, failurenm VARCHAR(30))

AS

BEGIN

FOR SELECT failurecd, failurenm FROM  disrepair WHERE SUBSTRING(failurenm FROM 1 FOR 1)=:firstchar

INTO :failurecd, :failurenm

DO SUSPEND;

END 

Данная процедура является:

Ответ: а) Процедурой выбора

21) Какой из приведенных ниже запросов следует использовать для создания процедуры, которая будет выполнять обновление заданного номера телефона в таблице Abonent и возвращать в качестве результата фамилию абонента, у которого изменен номер, и новый номер его телефона?

Ответ: а) CREATE PROCEDURE Phone (Old_Phone VARCHAR(6), New_Phone VARCHAR(6))

RETURNS (AbFIO VARCHAR(20), AbOldPhone VARCHAR(6)) AS BEGIN

UPDATE Abonent SET Phone = :New_Phone WHERE Phone = :Old_Phone

RETURNING FIO, Phone INTO :AbFIO, :AbOldPhone;

END;

22) Для вывода информации о платежах абонента с заданным номером лицевого счета создана следующая процедура:

create procedure my_proc8 (schet varchar(30))

returns (Pservicecd integer,Ppaysum numeric(15,4),Ppaydate date,Ppaymonth smallint,Ppayyear smallint)

as begin

Ответ: в) for select servicecd,paysum,paydate,paymonth,payyear

from paysumma where accountcd =:schet

order by servicecd, paymonth, payyear

into :Pservicecd, :Ppaysum, :Ppaydate, :Ppaymonth, :Ppayyear

do suspend;

end

23) Определите, в каких случаях и для чего в хранимых процедурах используются операторы SUSPEND и EXIT.

Ответ: Оператор SUSPEND применяется в хранимых процедурах выбора для возвращения текущих значений выходных параметров, а оператор EXIT используется в выполняемых процедурах для того, чтобы прервать выполнение процедуры

24) Создана процедура для вывода информации о фактах оплат с минимальной суммой: номер лицевого счета и ФИО абонента, сумма оплаты, код услуги и дата оплаты.

create procedure my_proc26 returns (Aaccountcd varchar(30), Afio varchar(20), Ppaysum numeric(15,4), Pserv integer, Ppaydate date)

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: for select a.accountcd, a.fio, p.paysum, p.servicecd, p.paydate

from abonent a, paysumma p

where a.accountcd=p.accountcd and p.paysum = (select min(p1.paysum) from paysumma p1)

order by 1,4

into :Aaccountcd, :Afio, :Ppaysum, :Pserv, :Ppaydate do suspend;

end

25) Какая из нижеприведенных процедур составлена синтаксически правильно?

Ответ: в)

create procedure my_proc4 (kod smallint)

returns (Pcount integer)

as begin

for select count(requestcd) from request where ((executorcd =:kod)

and (executed = '1'))

into :Pcount

do suspend;

end

26) Для вывода максимального значения начисления, приходящейся на определенный месяц(mesyac) заданного года(god), разработана процедура:

create procedure my_proc18 (god smallint, mesyac smallint )

returns (Maxsum numeric(15,4))

as begin

Выберите операторы для продолжения текста процедуры:

Ответ: б)

for select max(nachislsum) as Max_nachislsum

from nachislsumma

where nachislyear=:god and nachislmonth=:mesyac

into :Maxsum do suspend;

end

27) Создана хранимая процедура с помощью следующей инструкции:

CREATE PROCEDURE proc_exec(firstchar VARCHAR(1)) RETURNS (executorcd INTEGER, fio_exec VARCHAR(30), count_req INTEGER)

AS

BEGIN

FOR SELECT e.executorcd, e.fio, count(r.requestcd) FROM executor e, request r

WHERE SUBSTRING(fio FROM 1 FOR 1)=:firstchar AND e.executorcd=r.executorcd

GROUP BY executorcd, fio INTO :executorcd, :fio_exec, :count_req

DO SUSPEND;

END

Данная процедура выводит следующую информацию:

Ответ: б) количество ремонтных заявок, на выполнение которых назначены исполнители, чьи фамилии начинаются с заданной буквы. Результат имеет вид: код исполнителя, фамилия исполнителя, количество назначенных ему ремонтых заявок;

28) Создать хранимую процедуру, которая выводит общую сумму начислений абонентов за заданный год. Результат представить в виде: номер лицевого счета абонента, общая сумма начислений, год, за который произведены начисления.

CREATE PROCEDURE nach_year(n_year SMALLINT)

RETURNS (accountcd VARCHAR(30), sum_year NUMERIC(15,4), nachislyear SMALLINT)

AS BEGIN

Выберите операторы для продолжения текста процедуры:

Ответ: FOR SELECT accountcd, sum(nachislsum), nachislyear FROM nachislsumma

WHERE nachislyear=:n_year GROUP BY accountcd, nachislyear INTO :accountcd, :sum_year, :nachislyear

DO SUSPEND;

END

29)

Соседние файлы в папке SQL