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

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

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

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

Выполняемой процедурой

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