有没有办法在Oracle表中的指定位置添加列?

时间:2013-09-15 05:16:18

标签: sql oracle oracle10g alter-table

考虑我在Oracle 10G中创建的这个初始表:

╔═════════════════════════════════╗
║  CUSTOMER_ID ACC_NO ACC_BALANCE ║
╠═════════════════════════════════╣
║         100    200        1000  ║
║         101    150        4000  ║
║         102    350        2000  ║
║         103    450        2500  ║
║         104    550        2200  ║
╚═════════════════════════════════╝

现在我想在表格中添加另一列customer_name。我用过:

ALTER TABLE BANK_ACCOUNT 
  ADD (CUSTOMER_NAME VARCHAR2(30)); 

并且正在插入列作为表中的最后一列,而我希望将列作为第二列添加到表中。现在我提到的SQL代码无法这样做。那么如何在指定位置添加列?它甚至可以在SQL中使用吗?

1 个答案:

答案 0 :(得分:1)

它实际上不是重要列是物理上的,因为select将允许您指定它们被检索的顺序(逻辑上)。

而且,如果您使用的select *不允许您指定订单,那么您可能不应该这样做。您应该这样做的情况很少(例如,数据库分析工具),大多数情况下,最好选择所需的各个列,即使您需要它们。这使您可以快速捕获模式更改,以便您可以使程序适应它们。

在任何情况下,SQL本身都不保证返回列的顺序,除非您显式地列出它们。 select *今天可以按顺序给你,明天按字母顺序给你。即使特定的实现允许你这样做(通过在“正确”的位置创建一个新表并将数据复制到一起,或提供像alter table T insert column C1 before C2这样的SQL扩展),我建议不要这样做。它不能移植到其他实现中,我更喜欢让我的代码尽可能便携。

此外,除了您在SQL中指定的内容之外,DBMS应该能够完全控制 存储数据的方式。可能是您的主键是第七列和第四十二列的复合,将它们放在物理记录的前面可能更有效。