怎么样给Oracle数据库中的表添加列?

打印 上一主题 下一主题

主题 1617|帖子 1617|积分 4851

首发微信公众号:SQL数据库运维
原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a5b3&token=1491694448&lang=zh_CN#rd
之前总结了ALTER TABLE的五种用法:Oracle中ALTER TABLE的五种用法(点击文字可跳转),现在以实例的方式详细讲解下ALTER TABLE ADD语句向表中添加一列或多列的用法。
 语法
  1. --在 ADD 之后指定要添加新列的名称,数据类型及其约束
  2. --添加一列
  3. ALTER TABLE table_name
  4. ADD column_name data_type constraint;
  5. --添加多列,在这个语法中,用逗号分隔两列
  6. ALTER TABLE table_name
  7. ADD (
  8.     column_name_1 data_type constraint,
  9.     column_name_2 data_type constraint,
  10.     ...
  11. );
复制代码
首先创建一个测试表,脚本如下:
  1. --我们本次使用的11g建立数据表语法(无自增)
  2. CREATE TABLE TEST(
  3.     ID INT,
  4.     NAME VARCHAR2(50),
  5.     SEX VARCHAR2(50),
  6.     PRIMARY KEY(ID)
  7. );
  8. -- 12c语法,设置ID自增,在12c以下版本会报错
  9. CREATE TABLE TEST(
  10.     ID NUMBER GENERATED BY DEFAULT AS IDENTITY,
  11.     NAME VARCHAR2(50),
  12.     SEX VARCHAR2(50),
  13.     PRIMARY KEY(ID )
  14. );
复制代码
以下语句将一个名为birth的新列添加到TEST表中,且不允许为空值:
  1. ALTER TABLE TEST
  2. ADD birth DATE NOT NULL;
复制代码
假如我们想记录一行的创建和更新的时间。那么可以再添加两列created_at和updated_at,如下所示:
  1. ALTER TABLE
  2.     TEST ADD(
  3.         created_at TIMESTAMP WITH TIME ZONE NOT NULL,
  4.         updated_at TIMESTAMP WITH TIME ZONE NOT NULL
  5.     );
复制代码
要检查表中是否存在列,可以从user_tab_cols视图查询数据。例如,以下语句将检查TEST表是否具有NAME 列。
  1. SELECT
  2.     COUNT(*)
  3. FROM
  4.     user_tab_cols
  5. WHERE
  6.     column_name = 'NAME'
  7.     AND table_name = 'TEST';
复制代码
当想在添加表之前检查列中是否存在列时,此查询就派上用场了。
例如,下面的PL/SQL块在使用PLSQL Developer工具添加之前检查TEST表是否有ADD_TMS列,如果有则输出“表中已存在要添加的列”,如果没有则直接添加。
  1. --需要注意的是默认pl/sql不输出,需要开启下,
  2. --开启步骤:首选项——>Oracle——>输出——>勾选已开启
  3. --声明变量存储要查询的表中的列是否存在
  4. DECLARE
  5.   v_column_exists number;  
  6. BEGIN
  7.   --从系统表中查询表中的列是否存在
  8.   Select count(*) into v_column_exists
  9.     from user_tab_cols
  10.     where upper(column_name) = 'ADD_TMS'
  11.       and upper(table_name) = 'TEST';
  12. --如果不存在,使用快速执行语句添加ADD_TMS列
  13.   if (v_column_exists = 0) then
  14.       execute immediate 'alter table TEST add (ADD_TMS date)';
  15.    ELSE
  16.       dbms_output.put_line('表中已存在要添加的列');   
  17.   end if;
  18. end;
  19. --oracle中斜杠(/)的含义斜杠就是让服务器执行前面所写的sql脚本
  20. /
复制代码

 
 打开微信搜索“SQL数据库运维”,点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表