如果过程成功,则过程返回true或false。PL/SQL

问题描述 投票:-1回答:2
CREATE OR REPLACE PACKAGE p1
AS

PROCEDURE exem1 (p_value OUT BOOLEAN);

PROCEDURE exem2 (p_value OUT BOOLEAN);

END p1;
/

CREATE OR REPLACE PACKAGE body p1
AS
   PROCEDURE exam1 (p_value IN VARCHAR2 DEFAULT 'NULL')
   IS
if exam2(p_value);
then
    p_value:= true;
DBMS_OUTPUT.put_line ('successful!!!!');
else
p_value:=false
DBMS_OUTPUT.put_line ('Error!!!!');
   BEGIN
      end if;
   END exam1;
end p1;/

但是它不起作用

sql oracle plsql plsqldeveloper
2个回答
0
投票

我已经修改了您的代码,以使其可以编译并正常运行:

OPS$ORACLE@UPGR>set serveroutput on
OPS$ORACLE@UPGR>--
OPS$ORACLE@UPGR>CREATE OR REPLACE PACKAGE p1 AS
  2  FUNCTION  exam1 (p_value IN VARCHAR2) RETURN BOOLEAN;
  3  PROCEDURE exam2 (p_value IN OUT VARCHAR2);
  4  END p1;
  5  /

Package created.

OPS$ORACLE@UPGR>show errors
No errors.
OPS$ORACLE@UPGR>CREATE OR REPLACE PACKAGE body p1 AS
  2  
  3  FUNCTION exam1 (p_value IN VARCHAR2) RETURN BOOLEAN
  4  IS
  5  BEGIN
  6   RETURN (p_value = 'OK');
  7  END;
  8  
  9  PROCEDURE exam2 (p_value IN OUT VARCHAR2)
 10  IS
 11   BEGIN
 12   IF exam1(p_value)
 13   THEN
 14    BEGIN
 15     p_value:= 'true';
 16     DBMS_OUTPUT.put_line ('successful!!!!');
 17    END;
 18   ELSE
 19    BEGIN
 20    p_value:='false';
 21    DBMS_OUTPUT.put_line ('Error!!!!');
 22    END;
 23   END IF;
 24   END;
 25  END;
 26  /

Package body created.

OPS$ORACLE@UPGR>show errors
No errors.
OPS$ORACLE@UPGR>declare
  2   v varchar2(5);
  3  begin
  4  v := 'OK';
  5  p1.exam2(v);
  6  dbms_output.put_line('v=' || v);
  7  end;
  8  /
successful!!!!
v=true

PL/SQL procedure successfully completed.

0
投票

它不起作用,因为您在规范中具有OUT参数,在声明中具有IN参数。

CREATE OR REPLACE PACKAGE p1
AS

PROCEDURE exem1 (p_value OUT BOOLEAN);                        -- OUT

PROCEDURE exem2 (p_value OUT BOOLEAN);                        -- OUT

END p1;
/

相比:

CREATE OR REPLACE PACKAGE body p1
AS
   PROCEDURE exam1 (p_value IN VARCHAR2 DEFAULT 'NULL')       -- IN
   IS
   BEGIN
     NULL; 
     -- your code here
   END exam1;

   PROCEDURE exam2 (p_value IN VARCHAR2 DEFAULT 'NULL')       -- IN
   IS
   BEGIN
     NULL; 
     -- your code here
   END exam1;
end p1;
/

标题和正文中的过程都需要具有相同的签名。

一旦完成,就可以修复各个过程中的其他语法错误,但是首先要做的是确定过程具有哪些输入和输出,并使签名一致。

© www.soinside.com 2019 - 2024. All rights reserved.