No se puede crear un procedimiento con una variable de vinculación porque los procedimientos almacenados son objetos del lado del servidor y las variables de vinculación solo existen en el lado del cliente.
Supongamos que estoy usando SQL * Plus, y que he creado algunas variables de vinculación. Una vez que salgo de SQL * Plus, las variables de vinculación que he creado ya no existen. Sin embargo, los procedimientos almacenados deben permanecer en la base de datos y, por lo tanto, no pueden tener ninguna referencia a nada que haya sido creado y luego destruido en el cliente.
He aquí un ejemplo que muestra que no se puede crear un procedimiento que hace referencia a una variable de vinculación:
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'
Puede sin embargo, pasar, una variable se unen como un parámetro OUT
para un procedimiento. El procedimiento puede asignar un valor al parámetro OUT
, y este valor se almacenará en la variable de vinculación.
Supongamos que tenemos el siguiente procedimiento:
CREATE OR REPLACE PROCEDURE do_stuff (
p_output OUT INTEGER
)
AS
BEGIN
p_output := 6;
END;
podemos utilizar esto para establecer una variable de vinculación de la siguiente manera:
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
Se puede publicar su código y cualquier error (s). No estoy seguro de que esté claro lo que intentas lograr. – cagcowboy
variable número v_bind; crear el procedimiento abc como v_one BEGIN seleccionar recuento (a) en v_one desde ab; if (v_one <> 0) then: v_bind: = 10; terminara si; podré hacer esto ... me está mostrando la variable mala v_bind ..... – jasmeet