如何在 PL/SQL 中将列添加到现有表之前检查列是否存在?

2024-05-01

在向 Oracle 数据库的表中添加列之前,如何添加简单的检查?我已经包含了用于添加列的 SQL。

ALTER TABLE db.tablename 
  ADD columnname NVARCHAR2(30);

可以使用以下视图之一访问有关 Oracle 数据库中列的所有元数据。

用户选项卡列 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_5465.htm#REFRN26276; -- 对于用户拥有的所有表

所有选项卡列 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_2102.htm#I1020276; -- 对于用户可访问的所有表

dba_tab_cols http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_5043.htm#REFRN23276; -- 对于数据库中的所有表。

因此,如果您正在 SCOTT.EMP 表中查找类似 ADD_TMS 的列,并且仅在该列不存在时才添加该列,则 PL/SQL 代码将遵循这些行。

DECLARE
  v_column_exists number := 0;  
BEGIN
  Select count(*) into v_column_exists
    from user_tab_cols
    where upper(column_name) = 'ADD_TMS'
      and upper(table_name) = 'EMP';
      --and owner = 'SCOTT --*might be required if you are using all/dba views

  if (v_column_exists = 0) then
      execute immediate 'alter table emp add (ADD_TMS date)';
  end if;
end;
/

如果您计划将其作为脚本(不是过程的一部分)运行,最简单的方法是在脚本中包含 alter 命令并查看脚本末尾的错误,假设您没有 Begin-End剧本..

如果你有 file1.sql

alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;

并且 col2 存在,当脚本运行时,其他两列将添加到表中,并且日志将显示错误说“col2”已经存在,所以你应该没问题。

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

如何在 PL/SQL 中将列添加到现有表之前检查列是否存在? 的相关文章

随机推荐

  • 多个 aiohttp Application() 在同一进程中运行?

    Can two aiohttp web Application 对象在同一进程中运行 例如在不同的端口上 我看到了一堆 aiohttp 代码的示例 例如 from aiohttp import web app web Application
  • 如何在画布的右上角绘制位图

    我正在尝试绘制位图top right hand corner of the Canvas 到目前为止我已经做了以下事情 100x40 dimensions for the bitmap bitmap BitmapFactory decode
  • 当参数具有相同名称时如何恢复内置函数? [复制]

    这个问题在这里已经有答案了 我知道你是 不应该 https stackoverflow com questions 2417979 can i use variable name type as function argument in p
  • 如何将 Pandas DataFrame 中加载的嵌入转换为 Gensim 模型?

    我有一个 DataFrame 其中索引是单词 并且有 100 个带有浮点数的列 这样对于每个单词 我将其嵌入为 100d 向量 我想将我的 DataFrame 对象转换为gensim 模型对象 https radimrehurek com
  • Qt - 如何在 QGraphicsPixmapItem 中显示 gif(动画)图像

    我正在尝试在 QGraphicsPixmapItem 中使用一张闪烁的图像 显示的图像没有动画效果 下面是原始图像 下面是在 QGraphicsPixmapItem 中使用此图像的 QGraphicsScene 有人能说一下如何实现这一目标
  • QML 适合所有分辨率的屏幕

    大家好 我的 QML 代码有问题 我犯了一个错误 我给元素设置了一定的大小 现在我在将应用程序放在其他设备上时遇到了问题 我会将我的代码粘贴到有宽度和高度的位置 以便您可以更改它以向我展示如何使用动态调整大小 我需要说我正在使用以下代码从
  • numpy float:算术运算比内置函数慢 10 倍?

    我对以下代码的计时非常奇怪 import numpy as np s 0 for i in range 10000000 s np float64 1 replace with np float32 and built in float 内
  • 如何从注册表获取重定向字符串?

    我正在使用从注册表中读取一些值Registry http msdn microsoft com en us library microsoft win32 registry 28v vs 110 29 aspx 我需要访问使用的一些值注册表
  • angularjs ng-grid:行之间的父子关系(隐藏/显示行)

    我正在尝试使用预定义的隐藏行来实现渲染 ng grid 并在某些特定事件上我想显示它们 我试图模拟行之间的父子关系 但所有行都将以通常的方式呈现和放置 默认情况下 子 行将呈现为 折叠 单击父项时 子行将显示为展开的 我正在尝试寻找一些解决
  • 无需通过电子邮件发送密码即可恢复密码

    所以 我一直在玩asp PasswordRecovery发现我真的不喜欢它 原因有几个 1 即使无法访问 Alice 的电子邮件 也可以重置 Alice 的密码 密码重置的安全问题缓解了这个问题 但并不能真正令我满意 2 Alice 的新密
  • 是否有任何 mongodb ORM 允许您为字段添加别名?

    我刚刚看了这个 http blog mongodb org post 38467892360 mongodb schema design insights and tradeoffs from http blog mongodb org p
  • 具有多个路径的 SVG 剪辑路径的悬停事件

    我有一个 SVG 演示图像 其中包含多个正在剪辑动画 GIF 的圆圈 当用户将鼠标悬停在每个圆圈上时 是否可以观察每个圆圈的悬停事件 例如左上角的圆圈或右中角的圆圈 另外 当这些圆圈悬停时 是否可以操纵这些圆圈上的颜色叠加 EDIT 理想情
  • Xcode 8:因特性而异,改变所有尺寸类别的布局

    我正在尝试使用 xcode 8 2 1 上的 very for Traits 功能 但是当我使用 Vary for Traits 更改一个尺寸类的布局 然后在完成后 完成变化 时 它实际上正在更改每个尺寸的布局我的故事板中的课程 例如我尝试
  • Logstash删除类型并保留_type

    我有一个logstash 客户端和服务器 客户端将带有logstash的udp输出的日志文件发送到服务器 服务器也运行logstash来获取这些日志 在服务器上 我有一个 json 过滤器 它会在实际日志的字段中提取 json 格式的消息
  • 如何使用 maven 在 JBoss AS 7 的 MANIFEST.MF 中生成模块依赖关系?

    在 JBoss AS 7 中 依赖于 AS 中包含的库的 Web 应用程序必须在 META INF MANIFEST MF 中声明这些依赖关系 如下所示 Dependencies
  • XCode 7 中的 UI 测试文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道 WWDC 2015 上引入的 XCode 7 中的新 UI 测试是否有任何文档 如果没有文档
  • Spring JTA 事务与 Websphere 的 JPA 和 jndi 数据源

    我有多个数据源和一个配置有 JPA 的数据库 我正在使用 websphere 7 我希望将所有这些数据源配置为全局事务 我正在使用下面的 spring 配置 但事务没有按预期的全局事务工作 如果一个数据库发生故障 则另一个数据库将被提交 这
  • 窗口依赖注入

    我想在 WPF 应用程序中使用 Unity 依赖注入 我的窗口抛出 System Windows Markup XamlParseException 对于 MainWindow 类型 没有找到默认构造函数 这是我的代码 应用程序 xaml
  • Excel 工作表到 Numpy 数组

    我正在尝试做一件令人难以置信的简单事情 将 Excel 工作表的部分内容加载到 Numpy 数组中 我发现了一个有用的拼凑 但它令人尴尬地不Pythonic 假设我的工作表被加载为 ws 代码 A np zeros 37 3 for i i
  • 如何在 PL/SQL 中将列添加到现有表之前检查列是否存在?

    在向 Oracle 数据库的表中添加列之前 如何添加简单的检查 我已经包含了用于添加列的 SQL ALTER TABLE db tablename ADD columnname NVARCHAR2 30 可以使用以下视图之一访问有关 Ora