【发布时间】:2015-06-09 19:03:45
【问题描述】:
我正在尝试创建一个随机 ROWID 用于测试目的。我知道这不是要走的路,但是由于我还没有数据,所以我只需要保证在插入 ROWID 的“值”时(使用ROWIDTOCHAR 函数)我每次都有不同的字符串。
我一直在阅读 Oracle 文档中的 DBMS_ROWID,并找到了一种使用 ROWID_CREATE 函数生成用于测试目的的 ROWID 的方法。
DBMS_ROWID.ROWID_CREATE (
rowid_type IN NUMBER,
object_number IN NUMBER,
relative_fno IN NUMBER,
block_number IN NUMBER,
row_number IN NUMBER)
RETURN ROWID;
我的问题是:有没有办法使用这个函数来实例化一个随机的 ROWID? (就像一个随机函数来生成IN参数)
根据我在DBMS_RANDOM 页面中看到的内容
- DBMS_RANDOM.RANDOM 在 [-2^^31, 2^^31) 中生成整数。
- DBMS_RANDOM.VALUE 生成 [0,1) 中的数字,精度为 38 位。
而且我不确定生成的值是否始终有效,可以作为 IN 参数并生成 ROWID。我只需要一个有效的 ROWID 就可以使用ROWIDTOCHAR 函数
【问题讨论】:
-
您不能创建“随机 ROWID” - ROWID 是表空间内一行的物理位置。您打算如何处理可能甚至不指向有效行的随机位置?或者可能是来自不同表的一行?您要解决的根本问题到底是什么?
-
从真实表中获取随机行的真实 ROWID 不是更容易吗(例如 SYS.OBJ$,如果您还没有自己的数据)? (无论如何,存储 ROWID 似乎很奇怪;but is usually safe)
-
我有一个类型,其中一个属性是 rowid。该 rowid 值将被插入到表中。我只需要一个随机的 ROWID 值,这样它就可以“通过”
ROWIDTOCHAR函数。谢谢亚历克斯。我会试试的,把它做成一个遮阳篷,这样我就可以接受了。我知道这很奇怪,但我不是设计架构的人:x