oracle alter table详解

2023-05-16

//建测试表
create table dept(
       deptno number(3) primary key,
       dname varchar2(10),
       loc varchar2(13) 
       );
create table employee_info(
       empno number(3),
       deptno number(3),
       ename varchar2(10),
       sex char(1),
       phone number(11),
       address varchar2(50),
       introduce varchar2(100)
       );
--
//0.重命名
  //0.1 表:rename dept to dt;
           rename dt to dept;
  //0.2 列:alter table dept rename column loc to location;
           alter table dept rename column location to loc;
//1.添加约束
  //1.1 primary key
      alter table employee_info add constraint pk_emp_info primary key(empno);
  //1.2 foreign key
      alter table employee_info add constraint fk_emp_info foreign key(deptno)
      references dept(deptno);
  //1.3 check
      alter table employee_info add constraint ck_emp_info check
      (sex in ('F','M'));
  //1.4 not null
      alter table employee_info modify phone constraint not_null_emp_info not null;
  //1.5 unique
      alter table employee_info add constraint uq_emp_info unique(phone);
  //1.6 default
      alter table employee_info modify sex char(2) default 'M';
//2.添加列
   alter table employee_info add id varchar2(18);
   alter table employee_info add hiredate date default sysdate not null;
//3.删除列
   alter table employee_info drop column introduce;
//3.修改列
  //3.1 修改列的长度
      alter table dept modify loc varchar2(50);
  //3.2 修改列的精度
      alter table employee_info modify empno number(2);
  //3.3 修改列的数据类型
      alter table employee_info modify sex char(2);
  //3.4 修改默认值
      alter table employee_info modify hiredate default sysdate+1;
//4.禁用约束
  alter table employee_info disable constraint uq_emp_info;
//5.启用约束
  alter table employee_info enable constraint uq_emp_info;
//6.延迟约束
  alter table employee_info drop constraint fk_emp_info;
  alter table employee_info add constraint fk_emp_info foreign key(deptno)
        references dept(deptno)
  deferrable initially deferred;
//7.向表中添加注释
  comment on table employee_info is 'information of employees';
//8.向列添加注释
  comment on column employee_info.ename is 'the name of employees';
  comment on column dept.dname is 'the name of department';
//9.清除表中所有数据
  truncate table employee_info;
//10.删除表
  drop table employee_info;
--
//下面来看看刚刚才我们对表dept和表employee_info所做的更改
//user_constraints视图里面包含了刚刚才我们创建的所有约束,以及其他信息,
//你可以用desc user_constraints命令查看其详细说明
select constraint_name,constraint_type,status,deferrable,deferred
from user_constraints
where table_name='EMPLOYEE_INFO';
--
CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS   DEFERRABLE     DEFERRED
------------------------------ --------------- -------- -------------- ---------
PK_EMP_INFO                    P               ENABLED  NOT DEFERRABLE IMMEDIATE
FK_EMP_INFO                    R               ENABLED  DEFERRABLE     DEFERRED
NOT_NULL_EMP_INFO              C               ENABLED  NOT DEFERRABLE IMMEDIATE
SYS_C005373                    C               ENABLED  NOT DEFERRABLE IMMEDIATE
UQ_EMP_INFO                    U               ENABLED  NOT DEFERRABLE IMMEDIATE
CK_EMP_INFO                    C               ENABLED  NOT DEFERRABLE IMMEDIATE
//我们可以通过user_cons_columns视图查看有关列的约束信息;
select owner,constraint_name,table_name,column_name
from user_cons_columns
where table_name='EMPLOYEE_INFO';
--
OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ---------------
YEEXUN                         PK_EMP_INFO                    EMPLOYEE_INFO                  EMPNO
YEEXUN                         CK_EMP_INFO                    EMPLOYEE_INFO                  SEX
YEEXUN                         NOT_NULL_EMP_INFO              EMPLOYEE_INFO                  PHONE
YEEXUN                         SYS_C005373                    EMPLOYEE_INFO                  HIREDATE
YEEXUN                         UQ_EMP_INFO                    EMPLOYEE_INFO                  PHONE
YEEXUN                         FK_EMP_INFO                    EMPLOYEE_INFO                  DEPTNO
//我们将user_constraints视图与user_cons_columns视图连接起来
//查看约束都指向哪些列
column column_name format a15;
select ucc.column_name,ucc.constraint_name,uc.constraint_type,uc.status
from user_constraints uc,user_cons_columns ucc
where uc.table_name=ucc.table_name and
      uc.constraint_name=ucc.constraint_name and
      ucc.table_name='EMPLOYEE_INFO';
--
COLUMN_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS
--------------- ------------------------------ --------------- --------
EMPNO           PK_EMP_INFO                    P               ENABLED
DEPTNO          FK_EMP_INFO                    R               ENABLED
PHONE           NOT_NULL_EMP_INFO              C               ENABLED
HIREDATE        SYS_C005373                    C               ENABLED
PHONE           UQ_EMP_INFO                    U               ENABLED
SEX             CK_EMP_INFO                    C               ENABLED
--
//这里有个constraint_type,他具体指下面几种类型:
//C:check,not null
//P:primary key
//R:foreign key
//U:unique
//V:check option
//O:read only
--
//我们可以通过user_tab_comments视图获得对表的注释
select * from user_tab_comments
where table_name='EMPLOYEE_INFO';
TABLE_NAME                     TABLE_TYPE  COMMENTS
------------------------------ ----------- --------------------------
EMPLOYEE_INFO                  TABLE       information of employees
--
//我们还可以通过user_col_comments视图获得对表列的注释:
select * from  user_col_comments
where table_name='EMPLOYEE_INFO';
--
TABLE_NAME                     COLUMN_NAME                    COMMENTS
------------------------------ ------------------------------ ---------------------------
EMPLOYEE_INFO                  EMPNO                          
EMPLOYEE_INFO                  DEPTNO                         
EMPLOYEE_INFO                  ENAME                          the name of employees
EMPLOYEE_INFO                  SEX                            
EMPLOYEE_INFO                  PHONE                          
EMPLOYEE_INFO                  ADDRESS                        
EMPLOYEE_INFO                  ID                             
EMPLOYEE_INFO                  HIREDATE 
--
select * from user_col_comments
where table_name='EMPLOYEE_INFO' and
      comments is not null;
--
TABLE_NAME                     COLUMN_NAME                    COMMENTS
------------------------------ ------------------------------ ------------------------
EMPLOYEE_INFO                  ENAME                          the name of employees
--
//最后我们来查看一下修改后的表:
desc employee_info;
Name     Type         Nullable Default   Comments              
-------- ------------ -------- --------- --------------------- 
EMPNO    NUMBER(2)                                             
DEPTNO   NUMBER(3)    Y                                        
ENAME    VARCHAR2(10) Y                  the name of employees 
SEX      CHAR(2)      Y        'M'                             
PHONE    NUMBER(11)                                            
ADDRESS  VARCHAR2(50) Y                                        
ID       VARCHAR2(18) Y                                        
HIREDATE DATE                  sysdate+1
--
desc dept;
Name   Type         Nullable Default Comments               
------ ------------ -------- ------- ---------------------- 
DEPTNO NUMBER(3)                                            
DNAME  VARCHAR2(10) Y                the name of department 
LOC    VARCHAR2(50) Y
--

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle alter table详解 的相关文章

  • 从有序结果集中查找“运行”行

    我试图找出一种方法来识别满足某些条件的 运行 结果 按顺序连续行 目前 我正在订购结果集 并通过眼睛扫描特定模式 这是一个例子 SELECT the date name FROM orders WHERE the date BETWEEN
  • 了解 Mac 上的 Oracle Java

    我在 OS X 上使用 Java 很多很多年了 最近当 Apple 停止默认包含 Java 时 我放弃了操作系统并为我安装了它 当然是 Apple 的版本 现在我使用的是 OS X 10 8 并且需要安装 Java 7 因此我刚刚获得了 D
  • Oracle PL/SQL - NO_DATA_FOUND 异常是否对存储过程性能不利?

    我正在编写一个需要进行大量调节的存储过程 根据 C NET 编码中的常识 异常会损害性能 因此我也始终避免在 PL SQL 中使用它们 我在此存储过程中的调节主要围绕记录是否存在 我可以通过以下两种方式之一进行 SELECT COUNT I
  • 在 JDBC PL/SQL 块中多次使用命名参数时出错

    当使用命名参数调用 PL SQL 块时出现错误 当所有命名参数仅使用一次时 我的代码工作正常 但是当我复制标有 SQL 的 SQL 时 然后所有命名参数 以冒号开头 q 都使用了两次 现在我得到一个 SQL 异常 它说 参数名称的数量与注册
  • 如何使用 Hibernate 3.3.2GA 将 TIMESTAMP WITH TIME ZONE 映射到 Java 数据类型?

    如何映射 Oracle 列类型TIMESTAMP WITH TIME ZONE http download oracle com docs cd B19306 01 server 102 b14225 ch4datetime htm i10
  • PL/SQL 触发器问题

    我正在尝试编写一个触发器来填充包含员工更新工资信息的表 我现在遇到一个无法解决的问题 这是要填充的表 drop table SalUpdates cascade constraints create table SalUpdates Sal
  • 无效号码错误!似乎无法绕过它

    Oracle 10g 数据库 我有一张桌子叫s contact 这个表有一个字段叫做person uid This person uid字段是 varchar2 但包含某些行的有效数字和其他行的无效数字 例如 一行可能有一个person u
  • 将行连接成 CLOB

    关于这个主题有很多类似的问题 但我找不到任何解决方案来考虑最终结果对于 varchar2 来说太大的任何问题 所以我想做的就是改变这一点 Column1 Column2 1 Hello 1 world 1 please help 2 Tha
  • 如何为 Weblogic 10.3.6 启用 Java 持久性 2.0

    我正在使用 eclipse 和 weblogic 服务器 为了将项目添加到 weblogic 服务器 它需要支持 Java Persistance 2 0 但是当尝试安装它时 我不断收到此消息 在 Weblogic Server 安装中启用
  • SQL选择符号||是什么意思意思是?

    什么是 在 SQL 中做什么 SELECT a b AS letter 表示字符串连接 不幸的是 字符串连接不能在所有 sql 方言之间完全移植 ANSI SQL 中缀运算符 mysql concat 可变参数函数 caution 表示 逻
  • oracle 数据透视表中的列

    示例选择 select from select 1 cnt 2 sm 55 name 12 month 2011 year 12 2011 mnth txt from dual union all select 1 cnt 2 sm 54
  • 想要从字符格式转换为带小数的数字格式

    想要将字符格式 00001000000 转换为10000 00 请帮我 我已经尝试过 select to number 00012300 9999999999 99 nls numeric characters from dual 这个脚本
  • 从 Oracle Varchar2 中查找并删除非 ASCII 字符

    我们目前正在将一个 Oracle 数据库迁移到 UTF8 并且发现一些记录接近 4000 字节 varchar 限制 当我们尝试迁移这些记录时 它们会失败 因为它们包含的字符变成了多字节 UF8 字符 我想要在 PL SQL 中做的是找到这
  • 在 Oracle 中创建数据库链接时出错

    我有两个数据库 需要编写跨数据库查询 所以我试图创建一个数据库链接 CREATE PUBLIC DATABASE LINK DBLink CONNECT TO SchemaName IDENTIFIED BY 123 using DBNam
  • 用C++连接oracle数据库

    我正在寻找一种方法来连接到远程 Oracle 数据库并从 C 控制台应用程序中的表中读取一些数据 有人可以给我一些提示吗 谢谢 soci http soci sourceforge net http soci sourceforge net
  • 从Oracle表中删除重复行

    我正在 Oracle 中测试某些内容并使用一些示例数据填充表 但在此过程中我不小心加载了重复记录 因此现在我无法使用某些列创建主键 如何删除所有重复行并只保留其中一行 Use the rowid伪列 DELETE FROM your tab
  • 数据库的创建日期

    这是一个问题 起源于this https stackoverflow com questions 2522626 check how old an oracle database is 2523227 2523227杰米提出的问题 我想我会
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 在Oracle中查找不包含数字数据的行

    我试图在一个非常大的 Oracle 表中找到一些有问题的记录 即使该列是 varchar2 列 也应包含所有数值数据 我需要找到不包含数字数据的记录 当我尝试在此列上调用 to number col name 函数时 它会抛出错误 我想你可
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10

随机推荐