【问题标题】:Add a column SQL query in Oracle database在 Oracle 数据库中添加列 SQL 查询
【发布时间】:2012-07-17 05:50:49
【问题描述】:

我正在使用 Oracle 数据库(版本为 9i),我想在 oracle 数据库中的当前表中添加一列。

我想添加一个整数列来跟踪每个用户的无效尝试,所以默认值应该是 5。

当我尝试在 Sql*Plus 中执行此查询时,它会给出错误表或视图不存在(我已仔细检查表名是否正确。

ALTER TABLE CustApps_user ADD VALID_TRIES INT DEFAULT 5 NOT NULL;

【问题讨论】:

  • 当一个命令给你一个错误时,在寻求帮助时分享它是有帮助的。

标签: sql database oracle


【解决方案1】:

我猜你得到的错误是 ORA-00942。这可能意味着很多事情,但基本上它意味着该对象不存在于您正在执行的当前范围和上下文中。因此,例如,当我们通过角色而非直接授予权限时,尝试在另一个模式中的表上构建视图时会引发错误。

在您的情况下,这可能意味着该表位于另一个模式中。您通常可以通过视图或同义词访问它。您可以通过查询数据字典轻松检查这一点:

select owner, object_type
from all_objects
where object_name = 'CUSTAPPS_USER'

【讨论】:

  • 如果没有找到任何东西,请查找upper(object_name) = 'CUSTAPPS_USER',以防它是用区分大小写的名称构建的;当我在查询中看到混合大小写的表名时,我很怀疑。
【解决方案2】:
alter table
   table_name
add
   (
   column1_name column1_datatype column1_constraint,  
   column2_name column2_datatype column2_constraint,
   column3_name column3_datatype column3_constraint
   );

以下是一些 Oracle “alter table” 语法添加数据列的示例。

alter table
   cust_table
add
   cust_sex  varchar2(1) NOT NULL;

这是一个添加多个数据列的 Oracle “alter table”语法示例。

ALTER TABLE 
   cust_table 
ADD 
   (
      cust_sex             char(1) NOT NULL,
      cust_credit_rating   number
   );

【讨论】:

    【解决方案3】:

    您必须在查询中添加括号:

    ALTER TABLE CustApps_user ADD (VALID_TRIES INT DEFAULT 5 NOT NULL);
    

    INT是合法的,但是会转换成NUMBER,所以你也可以使用:

    ALTER TABLE CustApps_user ADD (VALID_TRIES NUMBER(38,0) DEFAULT 5 NOT NULL);
    

    或更改(降低)NUMBER 个精度。

    【讨论】:

    • 括号已记录在案,但实际上是可选的。我们可以添加一个没有它们的列。
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2018-11-04
    • 2015-06-23
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多