Oracle数据库编程经典300例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实例021 复制相同结构的表

【实例描述】

当实际应用中需要使用两个相同结构的数据表时,可以直接通过表结构复制功能实现。MS SQL Server、Access等数据库提供了图形化的操作界面来实现,而Oracle PL/SQL提供了一条简单语句来完成。

本实例参照图2-7中的STU表,通过CREATE TABLE命令复制一个与STU表结构相同的基本表STU1,操作完成后在SQL*Plus中可以看到STU和STU1两个表的结构,如图2-11所示。

图2-11 复制相同结构的表

【实现过程】

(1)确认STU1表是否存在,如果创建一个与已存在表相同名称的表将出现错误。通过DESC STU1命令查看STU1表。

    SQL> DESC STU1
    ERROR:
    ORA-04043: 对象STU1 不存在

(2)如果在Oracle SQL*Plus中使用以上命令后出现ERROR错误,并提示该表不存在后即可在其中输入如下代码复制表结构。

    SQL> CREATE TABLE STU1
      2  AS
      3  SELECT * FROM STU WHERE 1=2
      4  /

(3)SQL语句执行完成后再使用DESC STU1命令查看STU1表的结构,观察其字段是否与STU表一致。

【范例解析】

本实例使用CREATE TABLE命令创建基本表,与实例016不同的是没有定义基本表的字段、数据类型和约束等参数,而是以另一个已经存在的表作为蓝本进行创建。在Oracle PL/SQL中,复制相同结构的表使用如下语句:

    CREATE TABLE table_new
     AS
     SELECT * FROM table_old WHERE 1=2

其中,AS是复制表结构的关键字,SELECT子句是从已存在的表中获取所有字段,WHERE子句表示只复制表结构,不复制表数据,关于表数据的复制,在后面的实例中还将会具体讲解到。

注意:上述语句中的WHERE子句只是用于限制表数据的复制,其并不是唯一的写法,读者也可以将该实例改写如下,其执行效果是相同的。

    SQL> CREATE TABLE STU1
      2  AS
      3  SELECT * FROM STU WHERE ROWNUM<1
      4  /