gpt4 book ai didi

database - Oracle 中有类似 "column symlink"的东西吗?

转载 作者:太空狗 更新时间:2023-10-30 01:59:50 26 4
gpt4 key购买 nike

我想暂时通过两个列名访问我的数据库中的一列。

为什么?列名选错了,想重构一下。因为我希望我的 webapp 在更改列名时保持稳定,所以最好

  1. 有一个名为better_column_name 的(让我们称之为)符号链接(symbolic link)指向列bad_column_name
  2. 更改网络应用程序以使用better_column_name
  3. 删除符号链接(symbolic link)并将列重命名为 better_column_name

“Refactoring Databases”建议实际添加第二个在提交时同步的列以实现此目的。我只是希望 Oracle 可能有一种更简单的方法,工作量和开销更少。

最佳答案

只要您的代码同时使用了这两个列名,我就看不出有什么方法可以解决该表中将有两个(实际)列的事实。

我会添加具有正确名称的新列,然后创建一个触发器来检查哪个列已被修改并相应地更新“其他”列。因此,无论正在更新什么,该值都会与另一列同步。

迁移完所有使用旧列的代码后,移除触发器并删除旧列。

编辑

触发器会做这样的事情:

CREATE OR REPLACE TRIGGER ...
...
UPDATE OF bad_column_name, better_column_name ON the_table
...
BEGIN
IF UPDATING ('BAD_COLUMN_NAME') THEN
:new.better_column_name = :new.bad_column_name
END IF;

IF UPDATING ('BETTER_COLUMN_NAME') THEN
:new.bad_column_name = :new.better_column_name
END IF;
END;

IF 语句的顺序控制哪个更改具有“更高优先级”,以防有人同时更新两列。

关于database - Oracle 中有类似 "column symlink"的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com