举例,Oracle自定义类型中含constructor、map,static,member的
时间: 2024-02-25 19:51:53 浏览: 47
好的,我可以给你一个简单的例子:
```sql
CREATE TYPE Person AS OBJECT (
name VARCHAR2(20),
age NUMBER,
STATIC FUNCTION getCount RETURN NUMBER,
MEMBER FUNCTION print RETURN VARCHAR2
) NOT FINAL;
CREATE OR REPLACE TYPE BODY Person AS
STATIC count NUMBER := 0;
STATIC FUNCTION getCount RETURN NUMBER IS
BEGIN
RETURN count;
END;
MEMBER FUNCTION print RETURN VARCHAR2 IS
BEGIN
RETURN 'Name: ' || name || ', Age: ' || age;
END;
CONSTRUCTOR FUNCTION Person(name VARCHAR2, age NUMBER) RETURN SELF AS RESULT IS
BEGIN
SELF.name := name;
SELF.age := age;
count := count + 1;
RETURN;
END;
END;
/
```
这个例子中,定义了一个自定义类型 `Person`,含有一个带有 `VARCHAR2` 和 `NUMBER` 参数的构造函数 `Person`,以及一个成员函数 `print`。另外还有一个静态成员变量 `count` 和一个静态成员函数 `getCount`,用于统计 `Person` 类的实例数量。然后可以通过创建多个 `Person` 实例来演示该类型的使用,例如:
```sql
DECLARE
people PersonList := PersonList();
BEGIN
people.EXTEND(3);
people(1) := Person('Tom', 20);
people(2) := Person('Jerry', 18);
people(3) := Person('Alice', 22);
DBMS_OUTPUT.PUT_LINE('Number of people: ' || Person.getCount());
FOR i IN 1..people.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('ID: ' || i || ', ' || people(i).print());
END LOOP;
END;
```
在这个例子中,利用 `Person` 类型创建了一个 `PersonList` 容器,并向其中添加了三个 `Person` 实例。然后利用 `FOR` 循环遍历容器,输出每个实例的信息。
阅读全文