如何使用一个Alter table语句在Oracle中重命名多个列?

4

为什么你不能发出多个语句?你是如何选择要重命名的列和要如何称呼它们的?(你已经链接到了JavaDB文档;Oracle RDBMS版本在这里;但你仍然只能在每个alter语句中重命名一个。) - Alex Poole
SQL标准(以及随之而来的Oracle DB和可能是所有其他SQL方言)没有定义一个ALTER TABLE语句,可以在一次操作中更改多个列名。因此,如果您需要自动化此类操作,您将不得不编写自己的代码(或找到已经由他人编写的代码)。但是为什么呢?为什么您必须重命名这么多列,以至于逐个更改它们是不可行的呢? - user5683823
3个回答

6

截至Oracle 18c,无法在单个命令中重命名多个表列。

Oracle 18c SQL语言参考手册包括以下图表,以说明ALTER TABLE命令的RENAME_COLUMN_CLAUSE如何工作。不幸的是,几乎每个列属性都可以以组的形式进行修改,除了重命名。

enter image description here


1
你可以在循环语句中使用 user_tab_columns 字典视图作为数据源。
declare
  v_table_name varchar2(40):='mytable';
begin
  for c in ( select from user_tab_columns where table_name = upper(v_table_name) )
  loop
    execute immediate ('ALTER TABLE '||c.table_name||' RENAME COLUMN '||c.column_name
                                                   ||' TO new_'||c.column_name);
  end loop;
end;

我怀疑OP帖子中的“old_name”和“new_name”是泛指的 - 例如,他可能想将“baseball”更名为“MLB”,将“basketball”更名为“NBA”(使用美国名称)。您提出的解决方案可以针对这个更泛化的问题进行调整,但这将更加复杂。 - user5683823
@mathguy 你可能是对的,但我们对于重命名策略还没有足够的线索。 - Barbaros Özhan

-1
ALTER TABLE table_name
RENAME COLUMN old_column_name1 TO new_column_name1,
RENAME COLUMN old_column_name2 TO new_column_name2,
...,
RENAME COLUMN old_column_nameN TO new_column_nameN;

1
你确定这在 Oracle 中可行吗?其他人说你不能这么做。 - Rohit Gupta
1
在21c版本中,该命令会引发错误“ORA-23290:此操作不能与任何其他操作结合使用”。 - Jon Heller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接