Row ID
Oracle ROWID can be selected and retrieved explicitly into an instance of the RowID
. However, one interesting case is SELECT FOR UPDATE queries where Oracle returns ROWIDs implicitly. Those can be retrieved using Row::rowid
method.
let stmt = session.prepare("
SELECT manager_id
FROM hr.employees
WHERE employee_id = :id
FOR UPDATE
")?;
let row = stmt.query_single(107)?;
let rowid = row.rowid()?;
let manager_id: u32 = row.get(0)?;
assert_eq!(manager_id, 103);
let stmt = session.prepare("
UPDATE hr.employees
SET manager_id = :manager_id
WHERE rowid = :row_id
")?;
let num_updated = stmt.execute((
( ":MANAGER_ID", 102 ),
( ":ROW_ID", &rowid ),
))?;
assert_eq!(num_updated, 1);