_ CREATE PROCEDURE Pname(in_Tid IN VARCHAR2,in_IP IN VARCHAR2,outstaticip OUT VARCHAR2,outcount OUT NUMBER)
AS
BEGIN
select STATIC_IP into outstaticip from OP_TTER_MAPPING where TERMINAL_ID = in_Tid;
if in_IP = outstaticip then
return 1;
else
select COUNT(*) into outcount from OP_TTER_MAPPING where DYNAMIC_IP_LOW <= in_IP AND DYNAMIC_IP_HIGH >= in_IP AND TERMINAL_ID = in_Tid;
if outcount = 1 then
return 1;
else
return 0;
end if;
end if;
END;
_
Executesql("begin Pname(----)END")
メソッドでその戻り値を取得するにはどうすればよいですか[〜#〜] edit [〜#〜]
今、私はこのようにストアドプロシージャの戻り値を編集しました、私はそれを正しくやっていますか?
_CREATE PROCEDURE P_ValidateTIDIP(in_Tid IN VARCHAR2,in_IP IN VARCHAR2,outstaticip OUT VARCHAR2,outcount OUT NUMBER,outretvalue OUT NUMBER)
AS
BEGIN
select STATIC_IP into outstaticip from OP_TTER_MAPPING where TERMINAL_ID = in_Tid;
if in_IP = outstaticip then
outretvalue:=1;
else
select COUNT(*) into outcount from OP_TTER_MAPPING where DYNAMIC_IP_LOW <= in_IP AND DYNAMIC_IP_HIGH >= in_IP AND TERMINAL_ID = in_Tid;
if outcount = 1 then
outretvalue:=1;
else
outretvalue:=0;
end if;
end if;
END;
_
ストアドプロシージャでは、OUT
パラメータ[〜#〜] only [〜#〜]を使用して値を返します。例で2つの変数を定義したように:
outstaticip OUT VARCHAR2, outcount OUT NUMBER
戻り値をoutstaticip
とoutcount
などの出力パラメーターに割り当て、呼び出し元からそれらにアクセスします。つまり、ストアドプロシージャを呼び出すと、これら2つの変数も渡されます。ストアドプロシージャの呼び出し後、変数に戻り値が設定されます。
RETURN value
PL/SQL呼び出しからの戻りとして、FUNCTION
を使用します。 場合によっては、戻り変数として変数を1つだけ返すことができることに注意してください。
機能を使用:
CREATE OR REPLACE FUNCTION test_function
RETURN VARCHAR2 IS
BEGIN
RETURN 'This is being returned from a function';
END test_function;
-- IN arguments : you get them. You can modify them locally but caller won't see it
-- IN OUT arguments: initialized by caller, already have a value, you can modify them and the caller will see it
-- OUT arguments: they're reinitialized by the procedure, the caller will see the final value.
CREATE PROCEDURE f (p IN NUMBER, x IN OUT NUMBER, y OUT NUMBER)
IS
BEGIN
x:=x * p;
y:=4 * p;
END;
/
SET SERVEROUTPUT ON
declare
foo number := 30;
bar number := 0;
begin
f(5,foo,bar);
dbms_output.put_line(foo || ' ' || bar);
end;
/
-プロシージャの出力は、変数xおよびy(ans1:= xおよびans2:= y)から収集できます:それぞれ150および20。
CREATE PROCEDURE pr_emp(dept_id IN NUMBER,vv_ename out varchar2 )
AS
v_ename emp%rowtype;
CURSOR c_emp IS
SELECT ename
FROM emp where deptno=dept_id;
BEGIN
OPEN c;
loop
FETCH c_emp INTO v_ename;
return v_ename;
vv_ename := v_ename
exit when c_emp%notfound;
end loop;
CLOSE c_emp;
END pr_emp;
可能です。
プロシージャ内でReturnを使用すると、制御はプロシージャを呼び出す呼び出し側プログラムに転送されます。ループ内の出口のようなものです。
値を返しません。