是否可以遍历Oracle中的rowtype字段?

时间:2011-05-26 18:43:58

标签: oracle plsql

说我有这样的事情:

somerecord SOMETABLE%ROWTYPE;

是否可以在不知道字段名称的情况下访问某些记录的字段? 像somerecord [i]这样的东西,使得字段的顺序与表中的列顺序相同?

我看过一些使用动态sql的例子,但我想知道是否有更简洁的方法。

我想要做的是为我的表中的特定行生成/获取DML(插入查询)但我无法在此找到任何内容。

如果有另一种方法可以使用,我会很高兴使用,但也会非常好奇,知道如何处理这个问题的前一部分 - 它更通用。

谢谢

2 个答案:

答案 0 :(得分:2)

这并不能完全回答你问的问题,但可能会得到你想要的结果......

您可以查询USER_TAB_COLUMNS视图(或其他类似的* _TAB_COLUMN视图)以获取表格(或视图)中列的列名称(COLUMN_NAME),位置(COLUMN_ID)和数据类型(DATA_TYPE)等信息)你可能用来生成DML。

您仍然需要使用动态SQL来执行生成的DML(或者至少单独生成静态SQL)。

但是,此方法不适用于标识任意查询中的列(除非您创建它的视图)。如果需要,可能需要使用DBMS_SQL(或其他工具)。

希望这有帮助。

答案 1 :(得分:1)

据我所知,没有通过索引引用记录字段的简洁方法。

但是,如果您对同一个表有很多不同类型的更新,每个更新都有自己的列设置要更新,您可能希望避免使用动态sql并查看使用值静态填充记录的方向,然后发出update someTable set row = someTableRecord where someTable.id = someTableRecord.id;

这种方法有其自身的缺点,例如,对每个甚至未更改的列发布更新,从而创建额外的重做日志数据,但我认为应该考虑它。