it-swarm.com.de

Kann "return" in einer gespeicherten Prozedur verwendet werden?

 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;
  1. Ist es möglich, return in einer gespeicherten Prozedur wie oben zu verwenden? 
  2. Wenn wir return verwenden können, wie kann ich diesen Rückgabewert in der Executesql("begin Pname(----)END")-Methode erhalten 

EDIT

Jetzt habe ich meinen Rückgabewert in gespeicherter Prozedur so bearbeitet, mache ich das richtig?

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;
9
user1

In der gespeicherten Prozedur geben Sie die Werte mit dem OUT-Parameter ONLY zurück. Wie Sie in Ihrem Beispiel zwei Variablen definiert haben:

   outstaticip OUT VARCHAR2, outcount OUT NUMBER

Weisen Sie einfach die Rückgabewerte den Out-Parametern zu, d. H. outstaticip und outcount, und greifen Sie vom aufrufenden Speicherort zurück auf sie zu. Ich meine hier: Wenn Sie die gespeicherte Prozedur aufrufen, werden Sie mit auch diese beiden Variablen übergeben. Nach dem Aufruf der gespeicherten Prozedur werden die Variablen mit Rückgabewerten aufgefüllt.

Wenn Sie RETURN value vom PL/SQL-Aufruf zurückgeben möchten, verwenden Sie FUNCTION. Bitte beachten Sie, dass Sie für den Fall, dass Sie nur eine Variable als Rückgabevariable zurückgeben können.

10
Yogendra Singh

Verwenden Sie FUNKTION:

CREATE OR REPLACE FUNCTION test_function
RETURN VARCHAR2 IS

BEGIN
  RETURN 'This is being returned from a function';
END test_function;
6
Vaibhav Desai
-- 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;
/

- Die Ausgabe der Prozeduren kann aus den Variablen x und y (ans1: = x und ans2: = y) abgerufen werden:.

- Antwort geliehen bei: https://stackoverflow.com/a/9484228/1661078

3
user_sk
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;
1
arjun sah

Es ist möglich.

Wenn Sie innerhalb einer Prozedur Return verwenden, wird die Steuerung an das aufrufende Programm übergeben, das die Prozedur aufruft. Es ist wie ein Ausgang in Schleifen.

Es wird keinen Wert zurückgeben.

1
Manisundaram R