怎么样给Oracle数据库中的表添加列?
首发微信公众号:SQL数据库运维
之前总结了ALTER TABLE的五种用法:Oracle中ALTER TABLE的五种用法(点击文字可跳转),现在以实例的方式详细讲解下ALTER TABLE ADD语句向表中添加一列或多列的用法。
语法
--在 ADD 之后指定要添加新列的名称,数据类型及其约束
--添加一列
ALTER TABLE table_name
ADD column_name data_type constraint;
--添加多列,在这个语法中,用逗号分隔两列
ALTER TABLE table_name
ADD (
column_name_1 data_type constraint,
column_name_2 data_type constraint,
...
);
首先创建一个测试表,脚本如下:
--我们本次使用的11g建立数据表语法(无自增)
CREATE TABLE TEST(
ID INT,
NAME VARCHAR2(50),
SEX VARCHAR2(50),
PRIMARY KEY(ID)
);
-- 12c语法,设置ID自增,在12c以下版本会报错
CREATE TABLE TEST(
ID NUMBER GENERATED BY DEFAULT AS IDENTITY,
NAME VARCHAR2(50),
SEX VARCHAR2(50),
PRIMARY KEY(ID )
);
以下语句将一个名为birth的新列添加到TEST表中,且不允许为空值:
ALTER TABLE TEST
ADD birth DATE NOT NULL;
假如我们想记录一行的创建和更新的时间。那么可以再添加两列created_at和updated_at,如下所示:
ALTER TABLE
TEST ADD(
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL
);
要检查表中是否存在列,可以从user_tab_cols视图查询数据。例如,以下语句将检查TEST表是否具有NAME 列。
SELECT
COUNT(*)
FROM
user_tab_cols
WHERE
column_name = 'NAME'
AND table_name = 'TEST';
当想在添加表之前检查列中是否存在列时,此查询就派上用场了。
例如,下面的PL/SQL块在使用PLSQL Developer工具添加之前检查TEST表是否有ADD_TMS列,如果有则输出“表中已存在要添加的列”,如果没有则直接添加。
--需要注意的是默认pl/sql不输出,需要开启下,
--开启步骤:首选项——>Oracle——>输出——>勾选已开启 --声明变量存储要查询的表中的列是否存在
DECLARE
v_column_exists number;
BEGIN
--从系统表中查询表中的列是否存在
Select count(*) into v_column_exists
from user_tab_cols
where upper(column_name) = 'ADD_TMS'
and upper(table_name) = 'TEST';
--如果不存在,使用快速执行语句添加ADD_TMS列
if (v_column_exists = 0) then
execute immediate 'alter table TEST add (ADD_TMS date)';
ELSE
dbms_output.put_line('表中已存在要添加的列');
end if;
end;
--oracle中斜杠(/)的含义斜杠就是让服务器执行前面所写的sql脚本
/
打开微信搜索“SQL数据库运维”,点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
怎么样给Oracle数据库中的表添加列?的更多相关文章
- 用SQL语句创建和删除Access数据库中的表;添加列和删除列
用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...
- Oracle 数据库中查看表空间的2种方法
在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...
- ORACLE数据导入导出后新数据库中某些表添加操作报错[ORA-12899]
由于项目需要,我在搭建了新的开发环境后,需要将之前环境中的ORACLE数据库导出,再导入到新的开发环境下.当导出导入完成后,使用数据库进行添加操作时 发现针对很多表的添加操作报错,具体报错原因描述为: ...
- 如何导出远程oracle数据库中的表结构
从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2 ...
- oracle数据库获取指定表的列的相关信息
1.很多时候我们需要从数据库中获取指定表的所有列的相关属性,如 name,commens,datatype,datalength,pk等.下面就是制定的语句. select c.TABLE_NAME ...
- 文章标题 Oracle数据库中dual表使用
一. 业务场景 业务流程需要进行写入和更新的比较,所以有原表和历史表. 要求表中的ID唯一性,以及两张表的ID关联,另外后续可能数据库会进行迁移 二.方案选择 方案一:id设置为int型自增长. 这种 ...
- oracle数据库中的表设置主键自增
oracle中没有自增字段,可通过序列+触发器间接实现,cmd中sqlplus登录,直接运行即可.一般要经过一下几步: 1建立数据表 create table Test_Increase( ...
- 关于从Oracle数据库中删除表数据
1,删除表 drop 1.1 执行drop table table_name 语句 被 drop后的表被放在用户回收站(user_recyclebin)里,而没有被直接删除掉,回收站里的表可以被恢复 ...
- Oracle数据库中创建表空间语句
1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj ...
- oracle数据库中创建表空间和临时表空间,以及用户和密码以及设置密码永不过期
首先进入oracle用户,命令是: su - oracle sqlplus /nolog connect system/123456@ora11g 或者 [oracle@localhost ~]$ ...
随机推荐
- 【已解决】VMware Tools 启动脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义启动脚本,请确保该脚本没有错误。您也可以提交支持请求,报告此问题。
参考:https://www.cnblogs.com/rainbow-1/p/15391407.html
- MySQL登录退出与导入导出
登录退出MySQL 登录命令 mysql -u 用户名 -p 密码 -h IP -P 端口 mysql -u root -p password -h 127.0.0.1 -P 3306 一般登录命令 ...
- #轮廓线dp#HDU 1400 Mondriaan's Dream
题目传送门 分析 状压dp会TLE,考虑用轮廓线dp, 设 \(dp[i][j][S]\) 表示现在处理到 \((i,j)\) 这个位置轮廓线上状态为 \(S\) 的情况 二进制位为1表示左边或者上方 ...
- #状压dp#D 诗人小K
分析 考虑题目的唯一突破口就是\(x,y,z\) 那么要与二进制状态挂上钩,状态应表示某一段正好为\(x,y或z\) 设\(g[s][i]\)表示当前位置的元素为\(i\),上一次状态为\(s\), ...
- Lustre架构介绍的阅读笔记-基础知识
本文是在阅读Introduction to Lustre* Architecture的如下章节时的笔记. Lustre – Fast, Scalable Storage for HPC Lustre ...
- 元启发式算法库 MEALPY 初体验-遗传算法为例
简介 官网: MealPY官网 开源许可: (GPL) V3 MEALPY简介 官网简介翻译 MEALPY (MEta-heuristic ALgorithms in PYthon) 是一个提供最新自 ...
- IntelliJ IDEA Community 无法启动 Spring Boot 项目的解决方案
菜单中依次选择 Run >Edit Configuration 在弹出窗口中,点击左上角的 +,选择 Maven 在 Name 中自定义一个名称,一般与项目名称相同 在 Run 下方的文本框中输 ...
- Spring Cloud Alibaba 官方实践指南【文章有点长自备咖啡茶点】
注:本文内容均转自官方文档,方便胖友们学习,不代表博主观点. 链接地址:SpringCloudAlibaba | Spring Cloud Alibaba 基于网关实现 SpringCloud 服务发 ...
- 史上最全的中高级JAVA工程师-面试题汇总
史上最全的中高级JAVA工程师-面试题汇总 置顶 2019-10-15 18:58:32 Jeff.Smile 阅读数 34460更多 分类专栏: # 随笔 版权声明:本文为博主原创文章,遵循CC 4 ...
- HTC vive开发:关于手柄按键对接控制
一.关于左右手柄的对应关系 两个手柄和SteamVR_TrackedObject.EIndex是对应的,一个是EIndex.Device2,另一个是EIndex.Device3(有编号的那个) 在场景 ...