【问题标题】:What is a type in Pl/Sql [closed]Pl/Sql 中的类型是什么 [关闭]
【发布时间】:2015-11-17 06:32:13
【问题描述】:

我试图创建一个获取一系列输入的过程。 那时我开始了解“类型”。你能用一个例子解释一下类型吗?

【问题讨论】:

  • 您尝试过自己研究吗?有什么你不明白的具体内容?
  • 我在网上看到了一些示例代码。他们创造了一种类型。我想知道它的用途。
  • @user5505661 "我在网上看到了一些示例代码。他们创建了一个类型。我想知道它的用途。" 然后您应该发布这些示例并缩小范围你的问题。在这个阶段,您的问题“过于宽泛”。
  • @lalith kumar。谢谢你的回复。我只是想知道“类型”的使用。我只是不想只知道它在该特定代码中的用途。所以只有我问了这个问题

标签: database oracle plsql


【解决方案1】:

目的

使用 CREATE TYPE 语句创建对象类型、SQLJ 对象类型、命名可变数组 (varray)、嵌套表类型或不完整对象类型的规范。您可以使用 CREATE TYPE 和 CREATE TYPE BODY 语句创建对象类型。 CREATE TYPE 语句指定对象类型的名称、其属性、方法和其他属性。 CREATE TYPE BODY 语句包含实现该类型的方法的代码。

在 PL/SQL 中声明和初始化对象

对象类型可以表示任何现实世界的实体。例如,对象类型可以表示学生、银行账户、计算机屏幕、有理数或数据结构(如队列、堆栈或列表)。

目前,您无法在 PL/SQL 块、子程序或包中定义对象类型。您可以使用 SQL 语句 CREATE TYPE 在 SQL*Plus 中以交互方式定义它们。请参阅下面的示例,“定义对象类型”。

有关 CREATE TYPE SQL 语句的信息,请参阅Oracle Database SQL Reference。有关 CREATE TYPE BODY SQL 语句的信息,请参阅Oracle Database SQL Reference

在模式中定义和安装对象类型后,您可以使用它在任何 PL/SQL 块、子程序或包中声明对象。例如,您可以使用对象类型来指定属性、列、变量、绑定变量、记录字段、表元素、形参或函数结果的数据类型。在运行时,创建对象类型的实例;也就是说,该类型的对象被实例化。每个对象可以保存不同的值。

此类对象遵循通常的范围和实例化规则。在块或子程序中,局部对象在您进入块或子程序时被实例化,而在您退出时不再存在。在包中,对象在您第一次引用包时被实例化,而在您结束数据库会话时不再存在。

```
CREATE TYPE address_typ AS OBJECT ( 
   street          VARCHAR2(30),
   city            VARCHAR2(20),
   state           CHAR(2),
   postal_code     VARCHAR2(6) );
/
CREATE TYPE employee_typ AS OBJECT (
  employee_id       NUMBER(6),
  first_name        VARCHAR2(20),
  last_name         VARCHAR2(25),
  email             VARCHAR2(25),
  phone_number      VARCHAR2(20),
  hire_date         DATE,
  job_id            VARCHAR2(10),
  salary            NUMBER(8,2),
  commission_pct    NUMBER(2,2),
  manager_id        NUMBER(6),
  department_id     NUMBER(4),
  address           address_typ,
  MAP MEMBER FUNCTION get_idno RETURN NUMBER,
  MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) );
/
CREATE TYPE BODY employee_typ AS
  MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
  BEGIN
    RETURN employee_id;
  END;
  MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE(first_name || ' '  || last_name);
    DBMS_OUTPUT.PUT_LINE(address.street);
    DBMS_OUTPUT.PUT_LINE(address.city || ', '  || address.state || ' ' ||
                         address.postal_code);   
  END;
END;
/
CREATE TABLE employee_tab OF employee_typ;
```

Source

【讨论】:

  • 谢谢你。这很有用:)
【解决方案2】:

这是一个过于宽泛的话题。
Steven feuerstein 在他的 Oracle PL/SQL 编程一书中进行了很好的解释。

阅读与类型有关的第 11 章和第 12 章。您可以在线阅读本书here。快乐学习。

【讨论】:

  • 感谢您推荐这本书 :)
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 2014-10-14
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多