首页 > 解决方案 > 如何在 SQL 3 中创建一个继承自另一个表的表?

问题描述

我有这个表 salle 有 2 个属性这是从 salle 继承的表,它被称为 salleCours 并且有 3 个附加属性。当我在 sql 命令行中运行 oracle 11g express 中的第二个命令时,它在“under”下显示:缺少或无效选项。我不知道这是语法问题还是其他问题

Create table salle(
Numero varchar(20) primary key,
Videoprojecteur char(1) ) ;
Create table salleCours UNDER salle(
Capacite number(3),
Retroprojecteur char(1),
micro char(1)) ;

标签: sqloracle

解决方案


你想定义一个OBJECT类型,然后使用一个对象定义的表:

CREATE TYPE salle_type AS OBJECT(
  Numero          varchar(20),
  Videoprojecteur char(1)
) NOT FINAL;

CREATE TYPE salleCours_type UNDER salle_type(
  Capacite number(3),
  Retroprojecteur char(1),
  micro char(1)
);

CREATE TABLE salle OF salle_type (
  Numero PRIMARY KEY
);

然后您可以插入任一类型的行:

INSERT INTO salle VALUES( salle_type( 'abc', 'Y' ) );
INSERT INTO salle VALUES( salleCours_type( 'def', 'Y', 42, 'N', 'X' ) );

而且,如果你想要这些值:

SELECT s.*,
       TREAT( VALUE(s) AS salleCours_type ).Capacite AS capacite,
       TREAT( VALUE(s) AS salleCours_type ).Retroprojecteur AS Retroprojecteur,
       TREAT( VALUE(s) AS salleCours_type ).micro AS micro
FROM   salle s

哪个输出:

数字 | 视频项目 | 电容 | 逆向投影 | 微
:----- | :--------------- | --------: | :--------------- | :----
美国广播公司 | 是 |     |             | 无效的 
定义 | 是 | 42 | N | X    

db<>在这里摆弄


推荐阅读