Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РСБДтЗ / Курс лекций РСБДиЗ.doc
Скачиваний:
140
Добавлен:
05.03.2016
Размер:
1.63 Mб
Скачать

Возврат результатов

Хранимые процедуры сообщают свой "статус возврата", который указывает, была ли выполнена процедура полностью, или нет, а такжепричины неудачи. Это значение может храниться в переменной, которая передается процедуре при ее вызове, и использоваться в последующих операторах Transact-SQL. Другой способ возврата информации из хранимых процедур состоит в возврате значений черезвыходные параметры. Параметры, определенные как выходные, в операторе create procedure (создать процедуру) или execute(выполнить) используются для возврата значений в место вызова процедуры. Затем с помощью условных операторов можно проверитьвозвращаемое значение.

Код возврата и выходные параметры позволяют разделить хранимые процедуры на модули. Группа SQL операторов, которые используются несколькими хранимыми процедурами, могут быть объединены в одну процедуру, которая сообщает свой статус выполнения или значения своих параметров вызывающей процедуре. Например, многие системные процедуры, поставляемые с SQLСервером, обращаются к процедуре, которая проверяет являются ли указанные параметры правильными идентификаторами.

Если в операторах create procedure и execute указывается опция output в названии параметра, то процедура возвращает значение этого параметра вызывающему объекту. Этим объектом может быть SQL пакет или другая хранимая процедура, которые используют возвращаемые значения в своей дальнейшей работе. Если возвращаемые параметры используются в операторе execute, который является частью пакета, то значения возвращаемых параметров вместе с заголовком выводятся на экран перед выполнением последующих операторов пакета.

declare @tranName DObjectName

declare @retCode integer

begin

execute tran_Begin @tranName output

select @tranName

.........................................

Oracle

Создание процедур

create or replace procedure my_proc(i in number := 123,

j out number, k in out number /* error := 123 */)

as

begin

dbms_output.put_line('i = ' || i);

dbms_output.put_line('j = ' || j);

dbms_output.put_line('k = ' || k);

if i is null then

return;

end if;

-- error

-- i := 10;

j := 20;

k := 30;

end;

create or replace procedure my_proc_error

(i number /* error (1) */, s varchar2 /* error (10) */)

as

begin

null;

end;

declare

a number;

b number;

c number;

begin

a := 1;

b := 2;

c := 3;

my_proc(a, b, c);

dbms_output.put_line('a = ' || a);

dbms_output.put_line('b = ' || b);

dbms_output.put_line('c = ' || c);

end;

Создание функций

create or replace function my_fun(i in number) return number

as

j number;

begin

j := i+10;

return j;

end;

declare

a number;

begin

a := 12+my_fun(10);

dbms_output.put_line('a = ' || a);

end;

create or replace function my_fun(i in number) return number

as

j number;

procedure p(n in out number)

as

begin

n := n+i+j;

end;

begin

j := 3;

p(j);

j := j+i+10;

return j;

end;

declare

a number;

begin

a := 12+my_fun(10);

dbms_output.put_line('a = ' || a);

end;

Вызов процедур и функций

create or replace procedure my_p

(s varchar2, i number := 10, j number := 20)

as

begin

null;

end;

declare

a number;

b number;

s varchar2(100);

begin

my_p(s);

my_p(s, a);

my_p(s, a, b);

my_p(s=>s, j=>b);

my_p(s, j=>b);

end;

Соседние файлы в папке РСБДтЗ