gpt4 book ai didi

Oracle ROWID 作为函数/过程参数

转载 作者:行者123 更新时间:2023-12-01 07:21:51 35 4
gpt4 key购买 nike

我只是想听听关于 ROWID 类型用作任何函数或过程的输入参数的不同意见。

我通常使用并看到主键用作输入参数,但是使用 ROWID 作为输入参数有什么缺点吗?我认为这很简单,如果在 WHERE 子句中使用,选择非常快。

例如:

FUNCTION get_row(p_rowid IN ROWID) RETURN TABLE%ROWTYPE IS...

最佳答案

来自 concept guide :

Physical rowids provide the fastest possible access to a row of a given table. They contain the physical address of a row (down to the specific block) and allow you to retrieve the row in a single block access. Oracle guarantees that as long as the row exists, its rowid does not change.



ROWID 的主要缺点是,虽然它通常是稳定的,但在某些情况下可能会发生变化:
  • 重建表 (ALTER TABLE MOVE ...)
  • 导出/进口明显
  • 启用行移动的分区表

  • 主键在逻辑上标识一行,即使在删除+插入之后,您也总能找到正确的行。 ROWID 以物理方式标识行,并且不像主键那样持久。

    您可以在单个 SQL 语句中安全地使用 ROWID,因为 Oracle 将保证结果是一致的,例如删除表中的重复项。为安全起见,我建议您仅在行上有锁定 (SELECT ... FOR UPDATE) 时才使用 ROWID accross 语句。

    从性能的角度来看,主键访问要贵一些,但通常只有在进行大量单行访问时才会注意到这一点。如果性能很重要,在这种情况下,使用 set 处理通常可以获得比使用 rowid 进行单行处理更大的好处。特别是,如果 DB 和应用程序之间有很多往返,那么行访问的成本与往返成本相比可能可以忽略不计。

    关于Oracle ROWID 作为函数/过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4873128/

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