I have PLSQL block like below which add a dummy column , does an update and then drops and renames columns
BEGIN
NULL;
EXECUTE IMMEDIATE 'ALTER TABLE TESTMISMATCH ADD (TEMP_745634_1 VARCHAR2(4000 BYTE))';
UPDATE TESTMISMATCH SET TEMP_745634_1=TO_CHAR(A);
EXECUTE IMMEDIATE 'ALTER TABLE TESTMISMATCH DROP COLUMN A';
EXECUTE IMMEDIATE 'ALTER TABLE TESTMISMATCH RENAME COLUMN TEMP_745634_1 TO A';
End;
The first execute immediate statement is successful but the following UPDATE statement on the newly created column fails with the below error
ORA-06550: line 4, column 25:
PL/SQL: ORA-00904: "TEMP_745634_1": invalid identifier
ORA-06550: line 4, column 1:
But if I run the same without a plsql block ,all the statements are executed successfully, like below.
ALTER TABLE TESTMISMATCH ADD (TEMP_745634_1 VARCHAR2(4000 BYTE));
UPDATE TESTMISMATCH SET TEMP_745634_1=TO_CHAR(A);
ALTER TABLE TESTMISMATCH DROP COLUMN A;
ALTER TABLE TESTMISMATCH RENAME COLUMN TEMP_745634_1 TO A;
My initial suspicion is that with regard to PLSQL context and SQL context switch that happens between First "Execute Immediate" statement and Update statement.