web-dev-qa-db-fra.com

Est-il possible d'utiliser "return" dans une procédure stockée?

 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. Est-il possible d'utiliser return dans une procédure stockée comme ci-dessus? 
  2. Si nous pouvons utiliser return, comment puis-je obtenir cette valeur de retour dans la méthode Executesql("begin Pname(----)END") 

MODIFIER

Maintenant, j'ai modifié ma valeur de retour dans une procédure stockée comme ceci, est-ce que je le fais correctement?

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

Dans la procédure stockée, vous renvoyez les valeurs à l'aide du paramètre OUTONLY. Comme vous avez défini deux variables dans votre exemple:

   outstaticip OUT VARCHAR2, outcount OUT NUMBER

Attribuez simplement les valeurs de retour aux paramètres de sortie, à savoir outstaticip et outcount, et accédez-y depuis l'emplacement de l'appelant. Ce que je veux dire ici est que: lorsque vous appelez la procédure stockée, vous transmettez également ces deux variables. Après l'appel de la procédure stockée, les variables seront renseignées avec des valeurs de retour.

Si vous souhaitez que RETURN value soit renvoyé à partir de l'appel PL/SQL, utilisez FUNCTION. S'il vous plaît noter que dans le cas, vous seriez en mesure de renvoyer une seule variable en tant que variable de retour.

10
Yogendra Singh

Utilisez la fonction:

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;
/

- La sortie de procédure peut être collectée à partir des variables x et y (ans1: = x et ans2: = y) seront respectivement 150 et 20.

- Réponse empruntée à: 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

C'est possible.

Lorsque vous utilisez Return dans une procédure, le contrôle est transféré au programme appelant qui appelle la procédure. C'est comme une sortie en boucle.

Cela ne retournera aucune valeur.

1
Manisundaram R