ERROR at line 3: ORA-38104: Columns referenced in the ON Clause cannot be updated: "T"."VALUE" Why is it so..
LAST UPDATE /* PARALLEL(TEMP_TABLE 12) */ TEMP_TABLE NOLOGGING SET NROW_ID = ROW_ID WHERE ROWID = ROWID_TAB(I) AND ROW_ID IS NULL; COMMIT; END LOOP; CLOSE REC_CUR; END; Against this above procedure one of our DBA make a comment as mentioned below : "This update is based on 'rowid' column that is a hidden pseudo column, and not a part of the table definition.
So it may be quicker to do the update in a single statement.
Using the cursor FOR loop construct is a declarative way of asking Oracle Database to fetch each of the rows specified by your cursor and then execute the loop body for that row.
You don’t have to explicitly open the cursor, code the fetch, check to see if the cursor is exhausted, or close the cursor. The problem with using a cursor FOR loop is that either it isn’t the appropriate construct for querying data (as is the case for a single-row fetch) or it isn’t the most efficient approach (BULK COLLECT offers a faster way of querying data).
You cannot use the update of a join in this case because the database currently wants you to JOIN to T on all of these columns - selecting where fld_name ='A' is insufficient.