Search code examples
stored-proceduresplsqloracle11gprocedure

Procedure calling another procedure


CREATE OR REPLACE PROCEDURE numeros (entra1 NUMBER, entra2 NUMBER)
IS
v_num1 NUMBER;
v_num2 NUMBER;
BEGIN
v_num1:=entra1;
v_num2:=entra2;
END;

-----------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE somando
IS
v_soma NUMBER;
v_num1 NUMBER;
v_num2 NUMBER;
BEGIN
numeros(40,60);
v_soma:=(v_num1+v_num2);
DBMS_OUTPUT.PUT_LINE('O valor da soma de ' ||v_num1||' e '||v_num2||' é:'||v_soma);
END somando;

Why I can't catch the values from the first procedure "numeros", when I execute the procedure "somando" the result is empty " ".


Solution

  • Assuming this is PL/SQL, I believe there are a few possible workarounds for this. The easiest being to make output parameter variables in the procedure to get the numbers like so:

    CREATE OR REPLACE PROCEDURE numeros(
        entra1 IN NUMBER,
        entra2 IN NUMBER,
        out_entra1 OUT NUMBER,
        out_entra2 OUT NUMBER)
    IS
        v_num1 NUMBER;
        v_num2 NUMBER;
    BEGIN
        v_num1 := entra1;
        v_num2 := entra2;
        out_entra1 := v_num1;
        out_entra2 := v_num2;
    END numeros;
    
        ----------------------------
    
    CREATE OR REPLACE PROCEDURE somando IS
        v_soma NUMBER;
        v_num1 NUMBER;
        v_num2 NUMBER;
    BEGIN
        dbms_output.enable();
        numeros(40,60,v_num1,v_num2);
        v_soma := (v_num1+v_num2);
        DBMS_OUTPUT.PUT_LINE('O valor da soma de ' ||v_num1||' e '||v_num2||' é:'||v_soma);
    
    END somando;
    

    I believe a more recommended method would be to place these two procedures in a package and declare global variables in the header, but I'm not sure what your set up is like.