Oracle 如何在过程中调用存储过程并在同一行中打印输出?
如何在过程中调用存储过程并在同一行中打印输出。 例如,我的全名是“Alex Bob”,我为firstname(p1)和lastname(p2)创建了两个过程,如下所示:Oracle 如何在过程中调用存储过程并在同一行中打印输出?,oracle,plsql,Oracle,Plsql,如何在过程中调用存储过程并在同一行中打印输出。 例如,我的全名是“Alex Bob”,我为firstname(p1)和lastname(p2)创建了两个过程,如下所示: -- Procedure 1: CREATE OR REPLACE PROCEDURE p1(fn in out varchar) IS BEGIN dbms_output.put_line(fn); END; -- Procedure 2: CREATE OR REPLACE PROCEDURE p2(ln
-- Procedure 1:
CREATE OR REPLACE PROCEDURE p1(fn in out varchar)
IS
BEGIN
dbms_output.put_line(fn);
END;
-- Procedure 2:
CREATE OR REPLACE PROCEDURE p2(ln in out varchar)
IS
BEGIN
p1('Alex');
dbms_output.put_line(ln);
END;
-- Calling procedure
exec p2('Bob');
现在,我将得到如下输出:
Alex
Bob
但我想将名称打印在一起(在一行中),为此,我尝试在过程中调用过程,方法是创建局部变量并调用过程&将返回值存储在该变量中。这是我修改后的代码:
CREATE OR REPLACE PROCEDURE p1(fn in varchar)
IS
BEGIN
declare
cn varchar;
cn := exec p2('Bob');
dbms_output.put_line(fn || cn);
END;
CREATE OR REPLACE PROCEDURE p2(ln in out varchar)
IS
BEGIN
ln := ln;
END;
exec p1('Alex');
但这并不像预期的那样有效。如何实现这一点?您可以创建一个
私有过程来实现这一点。见下文:
CREATE OR REPLACE PROCEDURE p1 (fn IN VARCHAR)
AS
v_nam varchar2(100):='Bob';
--private Procedure
PROCEDURE p2 (LN IN OUT VARCHAR)
IS
BEGIN
null;
END;
BEGIN
p2(lN => v_nam);
DBMS_OUTPUT.put_line (fn ||' '||v_nam);
END;
执行:
SQL> exec p1('Alex');
Alex Bob
PL/SQL procedure successfully completed.
您可以创建一个专用过程来实现这一点。见下文:
CREATE OR REPLACE PROCEDURE p1 (fn IN VARCHAR)
AS
v_nam varchar2(100):='Bob';
--private Procedure
PROCEDURE p2 (LN IN OUT VARCHAR)
IS
BEGIN
null;
END;
BEGIN
p2(lN => v_nam);
DBMS_OUTPUT.put_line (fn ||' '||v_nam);
END;
执行:
SQL> exec p1('Alex');
Alex Bob
PL/SQL procedure successfully completed.
首先,文字不能作为in-OUT
参数传递,只能作为in
传递,这仅仅是因为您不能为文字分配任何内容,对吗?现在回到手头的问题。如果您需要这两个过程能够在同一行上打印,请在所有过程中使用dbms\u output.put()
,但最后一个过程和最后一个调用dbms\u output.put\u line()
。以下是一个例子:
CREATE OR REPLACE PROCEDURE p1(fn in varchar2)
IS
BEGIN
dbms_output.put(fn);
END;
/
-- Procedure 2:
CREATE OR REPLACE PROCEDURE p2(ln in varchar2)
IS
BEGIN
p1('Alex ');
dbms_output.put(ln);
END;
/
create or replace procedure p3(ln in varchar2)
is
begin
p2('Bob ');
dbms_output.put_line(ln);
end;
exec p3('is a nice guy')
结果:
Alex Bob is a nice guy
PL/SQL procedure successfully completed
首先,文字不能作为输入输出
参数传递-仅输入
,这仅仅是因为您不能为文字分配任何内容,对吗?现在回到手头的问题。如果您需要这两个过程能够在同一行上打印,请在所有过程中使用dbms\u output.put()
,但最后一个过程和最后一个调用dbms\u output.put\u line()
。以下是一个例子:
CREATE OR REPLACE PROCEDURE p1(fn in varchar2)
IS
BEGIN
dbms_output.put(fn);
END;
/
-- Procedure 2:
CREATE OR REPLACE PROCEDURE p2(ln in varchar2)
IS
BEGIN
p1('Alex ');
dbms_output.put(ln);
END;
/
create or replace procedure p3(ln in varchar2)
is
begin
p2('Bob ');
dbms_output.put_line(ln);
end;
exec p3('is a nice guy')
结果:
Alex Bob is a nice guy
PL/SQL procedure successfully completed