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;/
但它不起作用
答案 0 :(得分:1)
它不起作用,因为您在规范中有一个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;
/
标头和正文中的过程都需要具有相同的签名。
完成此操作后,您可以修复各个过程中的其他语法错误,但是首先要做的是确定过程具有哪些输入和输出,并使签名一致。
答案 1 :(得分: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.