CREATE SCHEMA 语句

CREATE SCHEMA 语句定义模式。 还可以在语句中创建一些对象并授予对对象的特权。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

权限

拥有 DBADM 权限的授权标识可以创建具有任何有效 schema-nameauthorization-name的模式。

不具有 DBADM 权限的授权标识只能创建具有与语句的授权标识匹配的 schema-nameauthorization-name 的模式。

如果该语句包含 schema-SQL-statement,那么 authorization-name 所拥有的特权 (如果未指定,那么缺省为该语句的授权标识) 必须至少包含下列其中一个权限:
  • 执行每个 schema-SQL-statement 所需的特权
  • DBADM 权限

语法

Read syntax diagramSkip visual syntax diagramCREATE SCHEMAschema-nameAUTHORIZATIONauthorization-nameschema-nameAUTHORIZATIONauthorization-name DATA CAPTURENONECHANGES schema-SQL-statement

描述

schema-name
用于命名模式的标识。 该名称不得标识目录中已描述的模式 (SQLSTATE 42710)。 名称不能以 "SYS" 开头 (SQLSTATE 42939)。 模式的所有者是发出该语句的授权标识。
AUTHORIZATION authorization-name
标识作为模式所有者的用户。 authorization-name 的值也用于命名模式。 authorization-name 不得标识目录中已描述的模式 (SQLSTATE 42710)。
schema-name AUTHORIZATION authorization-name
标识名为 schema-name的模式,其所有者为 authorization-nameschema-name 不得标识目录中已描述的模式 (SQLSTATE 42710)。 schema-name 不能以 "SYS" 开头 (SQLSTATE 42939)。
DATA CAPTURE
指示是否要将用于数据复制的额外信息写入日志。 缺省值是根据数据库配置参数 dft_schemas_dcc的值确定的。 如果值为 Yes ,那么缺省值为 CHANGES ,否则缺省值为 NONE。
NONE
指示不会记录任何额外的数据复制信息。
更改
指示有关此模式的 SQL 更改的额外信息将写入日志。 如果将复制此模式并且使用复制捕获程序从日志中捕获此模式的更改,那么此选项是必需的。
schema-SQL-statement
可以作为 CREATE SCHEMA 语句的一部分包含的 SQL 语句包括:
  • CREATE TABLE 语句,不包括类型表和具体化查询表
  • CREATE VIEW 语句,不包括带类型视图
  • CREATE INDEX 语句
  • COMMENT 语句
  • GRANT 语句

注意

  • 模式的所有者按如下所示确定:
    • 如果指定了 AUTHORIZATION 子句,那么指定的 authorization-name 是模式所有者
    • 如果未指定 AUTHORIZATION 子句,那么发出 CREATE SCHEMA 语句的授权标识是模式所有者。
  • 假定模式所有者是用户 (而不是组)。
  • 使用 CREATE SCHEMA 语句显式创建模式时,将向模式所有者授予对模式的 CREATEIN , DROPIN 和 ALTERIN 特权,从而能够将这些特权授予其他用户。
  • 在 CREATE SCHEMA 语句中创建的任何对象的定义者都是模式所有者。 模式所有者也是在 CREATE SCHEMA 语句中授予的任何特权的授权者。
  • CREATE SCHEMA 语句中任何 SQL 语句中的未限定对象名都由所创建模式的名称隐式限定。
  • 少于 8 个字节的模式名称将用空格填补,然后作为 8 个字节的名称存储在目录中。
  • 如果 CREATE 语句包含要创建的对象的限定名,那么限定名中指定的模式名必须与要创建的模式的名称相同 (SQLSTATE 42875)。 可以使用任何有效的模式名称来限定语句中引用的任何其他对象。
  • 建议不要使用 "SESSION" 作为模式名。 由于声明的临时表必须由 "SESSION" 限定,因此可以让应用程序声明与持久表同名的临时表。 引用模式名为 "SESSION" 的表的 SQL 语句将 (在语句编译时) 解析为已声明的临时表,而不是具有相同名称的持久表。 由于在不同时间针对静态嵌入式和动态嵌入式 SQL 语句编译 SQL 语句,因此结果取决于何时定义声明的临时表。 如果未使用模式名称 "SESSION" 定义持久表,视图或别名,那么不需要考虑这些问题。
  • 在模式级别设置 DATA CAPTURE 属性会导致新创建的表从模式继承 DATA CAPTURE 属性 (如果未在表级别指定)。

示例

  • 示例 1: 作为具有 DBADM 权限的用户,以用户 RICK 作为所有者创建名为 RICK 的模式。
       CREATE SCHEMA RICK AUTHORIZATION RICK
  • 示例 2: 创建具有库存部件表和部件号索引的模式。 向用户 JONES 授予对表的权限。
       CREATE SCHEMA INVENTRY
    
         CREATE TABLE PART (PARTNO   SMALLINT NOT NULL,
                            DESCR    VARCHAR(24),
                            QUANTITY INTEGER)
    
         CREATE INDEX PARTIND ON PART (PARTNO)
    
         GRANT ALL ON PART TO JONES
  • 示例 3: 创建名为 PERS 的模式,其中包含两个表,每个表都有一个引用另一个表的外键。 这是 CREATE SCHEMA 语句的一个功能部件示例,该功能部件允许在不使用 ALTER TABLE 语句的情况下创建此类表对。
       CREATE SCHEMA PERS
    
         CREATE TABLE ORG (DEPTNUMB  SMALLINT NOT NULL,
                            DEPTNAME VARCHAR(14),
                            MANAGER  SMALLINT,
                            DIVISION VARCHAR(10),
                            LOCATION VARCHAR(13),
                            CONSTRAINT PKEYDNO
                              PRIMARY KEY (DEPTNUMB),
                            CONSTRAINT FKEYMGR
                              FOREIGN KEY (MANAGER)
                              REFERENCES STAFF (ID) )
    
         CREATE TABLE STAFF (ID        SMALLINT NOT NULL,
                             NAME     VARCHAR(9),
                             DEPT     SMALLINT,
                             JOB      VARCHAR(5),
                             YEARS    SMALLINT,
                             SALARY   DECIMAL(7,2),
                             COMM     DECIMAL(7,2),
                             CONSTRAINT PKEYID
                               PRIMARY KEY (ID),
                             CONSTRAINT FKEYDNO
                               FOREIGN KEY (DEPT)
                               REFERENCES ORG (DEPTNUMB) )