oracle 12c中的隐含列


Invisible Columns

使用select * from ,desc 等看不到该列,

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 (
  id          NUMBER,
  description VARCHAR2(50) INVISIBLE
);

DESC tab1;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER

SQL>

INSERT INTO tab1 VALUES (1);
COMMIT;

SELECT * FROM tab1;

        ID
----------
         1

SQL>

在明确的指定它的名字进行查询的时候仍然是可用的

INSERT INTO tab1 (id, description) VALUES (2, ‘TWO‘);
COMMIT;

SELECT id, description
FROM   tab1;

        ID DESCRIPTION
---------- --------------------------------------------------
         1
         2 TWO

SQL>

下面关于隐含列的几项内容

  • 虚拟列可以设成invisible
  • 一个表可以对隐含列就行分区,
  • 外部表,表簇,临时表中不能包含隐含列
  • 用户自定义的类型不能包含隐含属性
  • You can not make system generated hidden columns visible.

Invisible Columns and Column Ordering

隐含列不分配列的顺序(colum_id),如果一个可见的列设为不可见,那么这个列将放到最后一列

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 (
  a NUMBER,
  b NUMBER,
  c NUMBER INVISIBLE
);

COLUMN column_name FORMAT A15

SELECT column_id,
       column_name,
       hidden_column
FROM   user_tab_cols
WHERE  table_name = ‘TAB1‘
ORDER BY column_id;

 COLUMN_ID COLUMN_NAME     HID
---------- --------------- ---
         1 A               NO
         2 B               NO
           C               YES

SQL> 

ALTER TABLE tab1 MODIFY b INVISIBLE;
ALTER TABLE tab1 MODIFY c VISIBLE;

SELECT column_id,
       column_name,
       hidden_column
FROM   user_tab_cols
WHERE  table_name = ‘TAB1‘
ORDER BY column_id;

 COLUMN_ID COLUMN_NAME     HID
---------- --------------- ---
         1 A               NO
         2 C               NO
           B               YES

SQL>

ALTER TABLE tab1 MODIFY b VISIBLE;

SELECT column_id,
       column_name,
       hidden_column
FROM   user_tab_cols
WHERE  table_name = ‘TAB1‘
ORDER BY column_id;

 COLUMN_ID COLUMN_NAME     HID
---------- --------------- ---
         1 A               NO
         2 C               NO
         3 B               NO

SQL>

强制类型Invisible Columns

隐含列的强制/可选等属性仍然是有效的,如下例:(隐含列的not null属性仍然是生效的)

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 (
  id          NUMBER NOT NULL,
  description VARCHAR2(50) NOT NULL,
  created_date DATE INVISIBLE NOT NULL
);

COLUMN column_name FORMAT A20

SELECT column_id,
       column_name,
       nullable,
       hidden_column
FROM   user_tab_cols
WHERE  table_name = ‘TAB1‘
ORDER BY column_id;

 COLUMN_ID COLUMN_NAME          N HID
---------- -------------------- - ---
         1 ID                   N NO
         2 DESCRIPTION          N NO
           CREATED_DATE         N YES

SQL>

INSERT INTO tab1 VALUES (1, ‘ONE‘);
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("TEST"."TAB1"."CREATED_DATE")

SQL>

ALTER TABLE tab1 MODIFY created_date NULL;
INSERT INTO tab1 VALUES (1, ‘ONE‘);

1 row created.

SQL>
时间: 2024-11-07 12:32:02

oracle 12c中的隐含列的相关文章

Oracle 12c中增强的PL/SQL功能

英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了一系列定义和执行PL/SQL程序单元的方式.本文覆盖了Oracle 12c几个新特性: 1.为结果缓存条件优化了调用者权限函数 2.可以在SQL语句中定义和执行PL/SQL函数 3.通过ACCESSIBLE BY条件指定一个白名单来限制程序单元的访问 4.可直接授权角色给指定程序单元 调用者权限和P

如何在oracle 12c中创建普通用户

-------如何在oracle 12c中创建普通用户------- [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Sun Nov 29 21:43:50 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edit

如何在Oracle 12C中添加多个分区 (Doc ID 1482456.1)

How to Add Multiple Partitions in Oracle 12C (Doc ID 1482456.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.1 and laterOracle Database Exadata Cloud Machine - Version N/A and laterOracle Cloud Infrastructure - Database Service -

Oracle 12C -- 在相同的列的集合上创建多个索引

在12C中,可以在相同的列的集合上创建多个索引,但是多个索引的类型要不同.同一时刻,只有一个是可见的. SQL> create table emp_tab as select * from emp; SQL> create index emp_tab_ix_01 on emp_tab(job,hiredate); --在创建另一个索引之前,要将上一步创建的索引变成invisible状态 SQL> alter index emp_tab_ix_01 invisible; SQL> c

Oracle 12C中pga_aggregate_limit参数的修改

应用某个批量无法正常进行,通过报错排查是由于在12c中参数pga_aggregate_limit参数的限制导致,此参数限制为硬性限制.此参数的修改非常简单,修改之后立即生效,需要注意的是此处CDB.PDB的pga_aggregate_limit参数都做了限制,调整的时候都做了调整. [dayu1:oracle]:/oracle/app/oracle/diag/rdbms/cluacdb/CLUACDB1/trace>sqlplus / as sysdba SQL*Plus: Release 12

oracle 12c 中scott账户与表问题

之前安装了12c版本,最近做练习发现怎么没有scott用户和11g自带的emp,dept等等的表.于是尝试解锁用户,发现用户不存在 SQL> alter user scott account unlock; alter user scott account unlock            * ERROR at line 1: ORA-01918: user 'SCOTT' does not exist 手动创建用户,出错,和11g不太一样 SQL> create user scott id

oracle 12c中导入dmp数据文件步骤

oracle版本为12c的导入步骤:1.新建用户:CREATE USER c##zj_szda IDENTIFIED BY zjdaszda DEFAULT TABLESPACE USERS QUOTA 50M ON USERS; 2.授予dba权限给zj_szdagrant dba to zj_szda 3.导入szda.dmp文件$imp c##zj_szda/zjdaszda fromuser=zj_szda touser=c##zj_szda file=f:/szda.dmp 注:1.c

[转]oracle 12c 中的分页子句

转自:http://blog.itpub.net/271063/viewspace-1061279/ -- 连接数据库 创建测试用户-- Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 -- Connected as [email protected]_192.168.56.120 create user scott identified by tiger default tablespace user

Oracle 12C -- 基于sequence的列的默认值

12C支持先创建一个sequence,然后再将该sequence指定为某个列的值的默认表达式. 和"identity column"具有以下不同点: ·对列的个数没有限制 ·sequence必须在列定义之前定义 ·如果删除了sequence,会导致后面的insert报错 ·表的owner,和使用者对该sequence必须有select权限 ·可以手动插入.更新该列(不使用sequence产生的值) SQL> drop sequence test_seq; SQL> crea