Невозможно создать процедуру с переменной связывания, поскольку хранимые процедуры являются объектами на стороне сервера, а переменные связывания существуют только на стороне клиента.
Предположим, я использую SQL * Plus и что я создал несколько переменных связывания.После выхода из SQL * Plus все созданные мной переменные связывания больше не существуют.Однако хранимые процедуры должны сохраняться в базе данных, и, следовательно, они не могут иметь никаких ссылок на что-либо, что было создано и затем уничтожено на клиенте.
Вот пример, показывающий, что вы не можете создать процедурукоторый ссылается на переменную связывания:
SQL> variable i number
SQL> exec :i := 0;
PL/SQL procedure successfully completed.
SQL> print :i
I
----------
0
SQL> create or replace procedure test_proc
2 as
3 begin
4 :i := 9;
5 end;
6 /
Warning: Procedure created with compilation errors.
SQL> show errors procedure test_proc;
Errors for PROCEDURE TEST_PROC:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3 PLS-00049: bad bind variable 'I'
Однако вы можете передать переменную связывания в качестве параметра OUT
для процедуры.Затем процедура может присвоить значение параметру OUT
, и это значение затем будет сохранено в вашей переменной bind.
Предположим, у нас есть следующая процедура:
CREATE OR REPLACE PROCEDURE do_stuff (
p_output OUT INTEGER
)
AS
BEGIN
p_output := 6;
END;
Мы можемиспользуйте это, чтобы установить переменную связывания следующим образом:
SQL> variable i number
SQL> exec :i := 0;
PL/SQL procedure successfully completed.
SQL> print :i
I
----------
0
SQL> exec do_stuff(:i);
PL/SQL procedure successfully completed.
SQL> print :i
I
----------
6