程序调用另一个程序
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;
为什么我无法从第一个过程 "numeros" 中获取值,当我执行过程 "somando" 结果为空 " "。
假设这是 PL/SQL,我相信有一些可能的解决方法。最简单的方法是在过程中创建输出参数变量来获取数字,如下所示:
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;
我认为更推荐的方法是将这两个过程放在一个包中并在header中声明全局变量,但我不确定你的设置是什么样的。
您可以将过程更改为 returns 值的函数,或者将过程的参数之一指定为 IN OUT
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;
为什么我无法从第一个过程 "numeros" 中获取值,当我执行过程 "somando" 结果为空 " "。
假设这是 PL/SQL,我相信有一些可能的解决方法。最简单的方法是在过程中创建输出参数变量来获取数字,如下所示:
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;
我认为更推荐的方法是将这两个过程放在一个包中并在header中声明全局变量,但我不确定你的设置是什么样的。
您可以将过程更改为 returns 值的函数,或者将过程的参数之一指定为 IN OUT