是否可以遍历Oracle中的行类型字段?

问题描述

| 说我有这样的事情:
somerecord SOMetaBLE%rOWTYPE;
是否可以在不知道字段名称的情况下访问某记录的字段? 类似于somerecord [i]这样的字段字段顺序将与表中的列顺序相同? 我已经看到了一些使用动态sql的示例,但是我想知道是否有更干净的方法可以做到这一点。 我想做的是为表中的特定行生成/获取DML(插入查询),但是我无法在此找到任何东西。 如果有另一种方法可以使用,但我很想知道如何解决该问题的前一部分-它用途更多。 谢谢     

解决方法

这并不能完全回答您提出的问题,但可能会为您带来想要的结果... 您可以查询USER_TAB_COLUMNS视图(或其他类似的* _TAB_COLUMN视图)来获取诸如表名(或视图)中的列名(COLUMN_NAME),位置(COLUMN_ID)和数据类型(DATA_TYPE)之类的信息可能会用来生成DML。 您仍然需要使用动态SQL来执行生成的DML(或至少分别生成静态SQL)。 但是,这种方法无法识别任意查询中的列(除非您创建了它的视图)。如果需要,则可能需要使用DBMS_SQL(或其他工具)。 希望这可以帮助。     ,据我所知,没有干净的方法可以通过它们的索引引用记录字段。 但是,如果同一张表有很多不同类型的更新,每个更新都有其自己的要更新的列,则可能要避免使用动态sql,而是朝用值静态填充记录,然后发出
update someTable set row = someTableRecord where someTable.id = someTableRecord.id;
的方向进行。 这种方法有其自身的缺点,例如,对每个甚至不变的列都发出更新,从而创建其他重做日志数据,但是我认为应该考虑。