如何在过程中调用存储过程并在同一行中打印输出。 例如我的全名是'Alex Bob',我为firstname(p1)和lastname(p2)创建了2个程序,如下所示:
-- 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');
但是这不能按预期工作。我怎样才能做到这一点?
答案 0 :(得分:2)
您可以创建Private Procedure
来实现此目的。见下文:
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.
答案 1 :(得分:2)
首先,文字不能作为in OUT
参数传递 - 仅IN
,因为你不能将任何内容分配给文字,是吗?现在回到手头的问题。如果您需要这两个程序能够在同一行上打印,请在所有程序中使用dbms_output.put()
,但在最后一个程序中使用dbms_output.put_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
结果:
var arr = ["1", "6", "4", "5", "9-11", "13-15"];