in,out具体是什么意思在网上很容易找到,调用存储过程也比较简单。下面看下调用in,out参数的存储过程
带返回参数的存储过程调用:
Declare
Sum int;
Begin
Tt_add(12,12,sum);--12是in类型参数,sum是out类型的参数,经过调用存储过程,sum的值就会随之改变
Dbms_output.put_line(sum);
End;
带返回参数的存储过程调用:
Declare
Sum int;
Begin
Tt_add(12,12,sum);--12是in类型参数,sum是out类型的参数,经过调用存储过程,sum的值就会随之改变
Dbms_output.put_line(sum);
End;
通过以下的例子你可以很清楚知道他们之间的差别
in:
CREATE OR REPLACE PROCEDURE TEST_1(P1 IN NUMBER) IS
BEGIN
IF P1 > 0 THEN
DBMS_OUTPUT.PUT_LINE('>0');
ELSE
DBMS_OUTPUT.PUT_LINE('<=0');
END IF;
END TEST_1;out:
CREATE OR REPLACE PROCEDURE TEST_1(P1 OUT NUMBER) IS
I NUMBER;
BEGIN
I := 5;
IF I > 0 THEN
DBMS_OUTPUT.PUT_LINE('>0');
ELSE
DBMS_OUTPUT.PUT_LINE('<=0');
END IF;
P1 := I;
END TEST_1;in out:
CREATE OR REPLACE PROCEDURE TEST_1(P1 IN OUT NUMBER) IS
I NUMBER;
BEGIN
I := 5;
IF P1 > 0 THEN
DBMS_OUTPUT.PUT_LINE('>0');
P1 := P1 + I;
ELSE
DBMS_OUTPUT.PUT_LINE('<=0');
P1 := P1 - I;
END IF;
END TEST_1;
out:表示参数在过程中将被赋值,可以传给过程的外部。
in out :表示该类型的参数既可以向过程体传值,也可以在过程体中赋值。create or replace procedure totalcredit
(xh in varchar2) as
xf number;
begin
select zxf
into xf
from xsb
where XH = xh
and rownum = 1;
dbms_output.put_line(xf);
end;
create or replace procedure count_grade
(zy in char, person_num out number) as
begin
select count(XH)
into person_num
from XSB
where ZY = zy
and ZXF > 40;
end;
OUT表示从存储过程返回参数,
IN OUT 表示传递参数和返回参数;
OUT:输出参数,存储过程给次变量赋值,调用完存储过程,此参数可以取到值
IN OUT:输入输出参数,此参数能够将值传递给存储过程,并能够在过中被赋值,外面可以取到值简单事例:
--存储过程
create procedure sp_test(A in number,B in out number,C out number)
is
v_sum number;
begin
C := A - B;
v_sum := A + B;
B := v_sum;
end sp_test;
--调用
declare
v_A number:=20;
v_B number:=10;
v_C number;
begin
sp_test(v_A,v_B,v_C);
dbms_output.put_line('B='||v_B);
dbms_output.put_line('C='||v_C);
end;
--输出结果
B=30
C=10