
Лёшка / Маркин Тест 3 / SQL / SQL(6)
.docСоздана процедура, которая выводит данные об абонентах, даты оплаты которых больше одной из заданных дат и меньше другой:
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
Для определения числа погашенных ремонтных заявок, выполненных исполнителем с заданным кодом, разработана процедура
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
При использовании оператора EXECUTE STATEMENT в формате:
FOR EXECUTE STATEMENT <строка> INTO:имя_переменной1, [имя_переменной2...]
DO
<группа операторов>
<cтрока> представляет собой:
любой запрос SELECT
Каким образом можно создать и использовать пользовательское исключение?
Исключение может быть сначала создано (с помощью запроса CREATE EXCEPTION), а затем вызвано, или же сразу сгенерировано с сообщением, задаваемым непосредственно в операторе вызова исключения.
Какой оператор вызывает переход на конечный оператор END в хранимой процедуре и используется для того, чтобы прервать выполнение ХП и вернуться в точку ее вызова:
EXIT
Создана хранимая процедура с помощью следующей инструкции:
CREATE PROCEDURE alter_phone(two_chars VARCHAR(2))
AS
BEGIN
UPDATE abonent SET phone='99'||SUBSTRING(phone FROM 3 FOR CHAR_LENGTH(phone))
WHERE SUBSTRING(phone FROM 1 FOR 2)=:two_chars;
END
Данная процедура является:
Выполняемой процедурой
EXECUTE STATEMENT не может выполнить SQL-запрос, записанный в виде <строка>, которая представляет собой:
CREATE DATABASE
Создана хранимая процедура с помощью следующей инструкции:
CREATE PROCEDURE abon_phone(two_chars VARCHAR(2))
RETURNS (accountcd VARCHAR(6), fio VARCHAR(20), phone VARCHAR(15))
AS
BEGIN
FOR SELECT accountcd, fio, phone FROM abonent WHERE SUBSTRING(phone FROM 1 FOR 2)=:two_chars
INTO :accountcd, :fio, :phone
DO SUSPEND;
END
Выберите запрос, с помощью которого можно выполнить данную процедуру:
SELECT * FROM abon _phone('68')
Создать хранимую процедуру для вывода количества ремонтных заявок, на выполнение которых назначен исполнитель, чья фамилия начинается с заданной буквы. Результат представить в виде: код исполнителя, фамилия исполнителя, количество ремонтных заявок.
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
Выберите оператор, который создает хранимую процедуру, если она не существует, иначе изменяет определение существующей процедуры и перекомпилирует ее:
CREATE OR ALTER PROCEDURE
Допустим, была создана процедура Spisok с помощью следующего запроса:
CREATE PROCEDURE Spisok RETURNS (LAccountCD VARCHAR(6), LFailure VARCHAR(50),
LIncomingDate DATE) AS BEGINFOR SELECT R.AccountCD, D.FailureNM, R.IncomingDate
FROM Request R, Disrepair D WHERE R.FailureCD = D.FailureCD
INTO :LAccountCD, :LFailure, :LIncomingDate DO SUSPEND;
END;
Какую из приведенных ниже команд следует использовать для выполнения данной хранимой процедуры?
SELECT * FROM Spisok;
Создана процедура для вывода информации о фактах оплат с минимальной суммой: номер лицевого счета и ФИО абонента, сумма оплаты, код услуги и дата оплаты.
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
Выберите оператор, который создает хранимую процедуру, если она не существует, иначе изменяет определение существующей процедуры и перекомпилирует ее:
CREATE OR ALTER PROCEDURE
Создана хранимая процедура с помощью следующей инструкции:
CREATE PROCEDURE alter_year(summa NUMERIC(15,4))AS
BEGIN
UPDATE nachislsumma SET nachislyear=nachislyear+1
WHERE nachislsum>:summa;
END
Данная процедура является:
Выполняемой процедурой
В учебной БД создана хранимая процедура, которая удаляет данные об абонентах , в чьих фамилиях больше заданного числа символов.
CREATE PROCEDURE delete_abonent (chislo INTEGER)
AS
BEGIN
DELETE FROM abonent WHERE CHAR_LENGTH(fio)>:chislo;
END
Предпринимается попытка выполнить процедуру с помощью следующего запроса:
EXECUTE PROCEDURE delete_abonent(10)
Будет ли выполнен данный запрос:
Нет
Создана хранимая процедура с помощью следующей инструкции:
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
Данная процедура является:
Процедурой выбора
Создана процедура изменения даты подачи всех ремонтных заявок заданного абонента на новую дату.
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
Для вывода неповторяющихся лицевых счетов абонентов, оплативших услуги в заданный месячный период указанного года создана процедура:
create procedure my_proc9 (god smallint, a smallint, b smallint)
returns (Paccountcd varchar(30))
as begin
Выберите операторы для продолжения текста процедуры:
for select distinct accountcd from paysumma
where ((payyear =:god) and (paymonth between :a and :b))
into :Paccountcd
do suspend;
end
Какие контекстные переменные из перечисленных не применяются в хранимых процедурах:
Все выше перечисленное
Создана процедура с помощью инструкции:
create procedure Summs returns(summa numeric(15,2)) as
declare variable s1 numeric(15,2);
declare variable s2 numeric(15,2);
begin
select sum(paysum) from paysumma where servicecd=1 into :s1;
select sum(paysum) from paysumma where servicecd=2 into :s2;
summa=:s1-:s2;
end
Данная процедура является:
Выполняемой процедурой