gpt4 book ai didi

sql - rowid 插入 Oracle 后可以立即失效吗?

转载 作者:行者123 更新时间:2023-12-01 14:23:24 25 4
gpt4 key购买 nike

我正在运行看起来像这样的查询:

INSERT INTO foo (...) VALUES (...) RETURNING ROWID INTO :bind_var

SELECT ... FROM foo WHERE ROWID = :bind_var

本质上,我插入一行并获取其 ROWID,然后针对该 ROWID 进行选择以从该记录中取回数据。不过,偶尔会找不到 ROWID。

忽略可能有更好的方法来做我想做的事情这一事实,假设没有其他人使用数据库,ROWID 是否有可能快速更改?

更新 涉及一个触发器。这是它的 DDL 语句:

CREATE OR REPLACE TRIGGER "LOG_ELIG_DEMOGRAPHICS_TRG" 
before insert on log_elig_demographics
for each row
begin
select log_elig_demographics_seq.nextval into :new.log_idn from dual;
end;

本质上,它只是一个触发器,用来帮助我们模拟 IDENTITY/AUTO INCREMENT 字段。这个触发器有问题吗?

最佳答案

ROWID 不会改变,除非:

  • 例如,您将表从一个表空间移动到另一个表空间 (ALTER TABLE t MOVE)
  • 行从一个分区切换到另一个分区(带 ENABLE ROW MOVEMENT 的分区表)
  • 您更新了 INDEX ORGANIZED 表的主键。

当一行在标准 (HEAP) 表中从一个 block 移动到另一个 block 时,例如,由于它变得太大以至于无法放入其原始 block ,它将被迁移。 Oracle 将留下指向新 block 的指针并移动该行。该行将保留其原始 ROWID。

可以依赖 ROWID,例如,它们在复制中用于刷新物化 View 。

关于sql - rowid 插入 Oracle 后可以立即失效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494099/

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