【发布时间】:2020-04-06 10:35:50
【问题描述】:
我是一个 pl/sql 初学者,试图了解如何在同一个包中调用过程。这是一个包含 2 个过程的示例包体。首先是用于创建员工,其次是在 emp_id 不为空时创建员工卡。你能告诉我如何在下面的 if 语句块中继续吗?
非常感谢!
create or replace PACKAGE BODY sample_package
IS
PROCEDURE create_employee(
emp_id IN OUT VARCHAR2,
emp_name IN VARCHAR2,
emp_surname IN VARCHAR2)
IS
BEGIN
schema.package.procedure(
emp_id,
emp_name,
emp_surname
);
IF (emp_id != null) THEN
--how do I call procedure create_id_card
END IF;
END;
PROCEDURE create_id_card(
card_id IN OUT VARCHAR2,
card_name IN VARCHAR2)
IS
BEGIN
schema.package.procedure(
card_id,
card_name
);
END;
END sample_package;
【问题讨论】:
-
为了从
create_employee调用create_id_card,create_id_card必须在包头中声明或放在create_employee之前或在create_employee之上转发声明PROCEDURE create_id_card(card_id IN OUT VARCHAR2, card_name IN VARCHAR2);。 -
参考 Belayer 的 cmets “正如当前编写的那样,create_id_card 过程将永远不会被调用。这不是因为调用语法不正确 - 它是正确的。它永远不会被调用,因为“(emp_id ! = null)" 永远不会返回 True。任何应用于 null 的操作总是返回 null。你需要 "(emp_id is not null)"