【问题标题】:Adding to a column 10 options on PLSQL在 PLSQL 上添加到第 10 列选项
【发布时间】:2021-09-08 20:18:03
【问题描述】:

我想添加列,但它应该是我的数据库 (PL/SQL) 的 10 个选项。

我的 sql 查询是这样的:

ALTER TABLE mytable
ADD NEWCOL

你觉得这样行吗?

【问题讨论】:

    标签: oracle ddl check-constraints


    【解决方案1】:

    我不必思考,我知道这行不通。

    SQL> INSERT_INTO MYTABLE
      2  (MYNEW_COL)
      3  VALUES
      4  (1,2,3,4,5,6,7,8,9,10);
    INSERT_INTO MYTABLE
    *
    ERROR at line 1:
    ORA-00900: invalid SQL statement
    

    如果您想准确插入这些值,请使用行生成器:

    SQL> insert into mytable (mynew_col)
      2  select level from dual
      3  connect by level <= 10;
    
    10 rows created.
    
    SQL> select * from mytable;
    
     MYNEW_COL
    ----------
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
    
    10 rows selected.
    
    SQL>
    

    否则,请发现其他有效的方法来做到这一点,例如

    SQL> insert into mytable (mynew_col)
      2  select 1 from dual union all
      3  select 2 from dual union all
      4  select 3 from dual;
    
    3 rows created.
    

    SQL> insert all
      2    into mytable (mynew_col) values (1)
      3    into mytable (mynew_col) values (2)
      4    into mytable (mynew_col) values (3)
      5  select * from dual;
    
    3 rows created.
    
    SQL>
    

    [编辑]啊,你把问题颠倒了。如果要添加新列并限制有效值的数量,则:

    SQL> alter table mytable add newcol number;
    
    Table altered.
    
    SQL> alter table mytable add constraint
      2    ch_col check (newcol between 1 and 10);
    
    Table altered.
    

    测试:

    SQL> update mytable set newcol = 0;
    update mytable set newcol = 0
    *
    ERROR at line 1:
    ORA-02290: check constraint (SCOTT.CH_COL) violated
    
    
    SQL> update mytable set newcol = 11;
    update mytable set newcol = 11
    *
    ERROR at line 1:
    ORA-02290: check constraint (SCOTT.CH_COL) violated
    
    
    SQL> update mytable set newcol = 2;
    
    16 rows updated.
    
    SQL>
    

    【讨论】:

    • 对不起,我写错了。我正在尝试添加一列,值将只有 1 到 10。所以我认为我应该使用 ALTER TABLE。我更新了问题,你能再看看吗?
    • 我编辑了答案并添加了更多信息;看看吧。
    • 什么是ch_col?顺便说一句,谢谢你的回答。你帮了很多忙
    • 不客气。 CH_COL 是检查约束的名称;这就是我命名它的方式,如果您愿意,您可以使用任何其他名称。但是,我更喜欢 PK_ 用于主键,FK_ 用于外键,CH_ 用于检查约束,这样我一眼就知道它们是什么。
    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2022-07-22
    相关资源
    最近更新 更多