我在包体中创建了一个函数,用于计算客户数据库中当前客户的数量,并创建了一个函数来创建客户。但是我不确定我需要在包装里面放什么。下面是包体内部的代码。
FUNCTION count_customer
RETURN NUMBER is
total NUMBER;
BEGIN
SELECT COUNT(*) into total FROM customer;
RETURN (total);
END;
FUNCTION CREATE_CUSTOMER(
Country IN VARCHAR2
,First_Name IN VARCHAR2
,Last_Name IN VARCHAR2
,Birth_Date IN VARCHAR2
,Customer_Type IN VARCHAR2
,Address IN VARCHAR2
) return VARCHAR2 IS
new_customer_id VARCHAR2(8);
BEGIN
SELECT custid_seq.NEXTVAL
INTO new_customer_id
FROM DUAL;
INSERT INTO customer (Customer_id, Country, First_Name, Last_name, Birth_date, Customer_Type, Address)
VALUES (new_customer_id, Country, First_Name, Last_name, Birth_date, Customer_Type, Address);
total_customers := total_customers + 1;
RETURN (new_customer_id);
end;
然后在包体中,我用这个来计算新的计数。
BEGIN
total_customers := count_customer();
END;
我遇到的问题是在实际包装中放入什么。我已经在包中创建了客户,这只是我遇到问题的客户数。
有什么想法吗?
您需要声明任何您希望从包外部访问的过程或函数。默认情况下,它们是私有的,这意味着它们只能在同一个包中调用。
显示这两个函数:
CREATE PACKAGE my_package AS
FUNCTION count_customer
RETURN NUMBER;
FUNCTION CREATE_CUSTOMER(
Country IN VARCHAR2
,First_Name IN VARCHAR2
,Last_Name IN VARCHAR2
,Birth_Date IN VARCHAR2
,Customer_Type IN VARCHAR2
,Address IN VARCHAR2
) return VARCHAR2;
END my_package;
CREATE PACKAGE BODY ...
文档中有更多的内容。
从你所拥有的,虽然,我怀疑你真的不希望count_customers()
暴露;您需要一个单独的公共函数来返回total_customers
的当前值。虽然这是假设所有的插入和删除总是经过包,否则计数将不同步。
放置你想从"外部"访问的函数或过程的声明性部分,如:
FUNCTION count_customer RETURN NUMBER;