И эти понятия здесь трактуются
И эти понятия здесь трактуются традиционно, как в языках программирования высокого уровня. Хранимая процедура-функция возвращает значение, которое присваивается переменной, определяющей имя процедуры. Процедура в явном виде не возвращает значение, но в ней может быть использовано ключевое слово OUTPUT, которое определяет, что данный параметр является выходным.
Рассмотрим несколько примеров простейших хранимых процедур.
/* процедура проверки наличия экземпляров данной книги
параметры:
@ISBN шифр книги
процедура возвращает параметр, равный количеству экземпляров
Если возвращается ноль, то это значит, что нет свободных экземпляров данной
книги в библиотеке.
*/
CREATE PROCEDURE COUNT_EX (@ISBN varchar(12)) AS
/* определим внутреннюю переменную */
DECLARE @TEK_COUNT int
/* выполним соответствующий оператор
SELECT
Будем считать только экземпляры, которые в настоящий момент находятся
не на руках у читателей, а в библиотеке */
select @TEK_COUNT = select count(*)
FROM EXEMPLAR WHERE ISBN = @ISBN
AND READERJD Is NULL AND EXIST = True
/* 0 - ноль означает, что нет ни одного свободного экземпляра данной книги в библиотеке */
RETURN @TEK_COUNT
Хранимая процедура может быть вызвана несколькими способами. Простейший способ — это использование оператора:
ЕХЕС <имя мроцедуры> <значение входного_параметра1>...
<имя_переменной_для_выходного параметра!>...
При этом все входные и выходные параметры должны быть заданы обязательно и в том порядке, в котором они определены в процедуре.
Например, если мне надо найти число экземпляров книги «Oracle8. Энциклопедия пользователя», которая имеет ISBN 966-7393-08-09, то текст вызова ранее созданной хранимой процедуры может быть следующим:
/* Определили две переменные
@Ntek - количество экземпляров данной книги в наличие в библиотеке
@ISBN - международный шифр книги */
declare @Ntek int
DECLARE @ISBN VARCHAR(14)
/* Присвоим значение переменной @ISBN */
Select @ISBN = '966-7393-08-09'