【发布时间】:2021-02-18 13:29:04
【问题描述】:
我有像下面这样的 PLSQL 块,它添加一个虚拟列,进行更新,然后删除并重命名列
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;
第一个执行立即语句成功,但新创建列上的以下 UPDATE 语句失败并出现以下错误
ORA-06550: line 4, column 25:
PL/SQL: ORA-00904: "TEMP_745634_1": invalid identifier
ORA-06550: line 4, column 1:
但是如果我在没有 plsql 块的情况下运行相同的语句,所有语句都会成功执行,如下所示。
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;
我最初的怀疑是关于第一个“立即执行”语句和更新语句之间发生的 PLSQL 上下文和 SQL 上下文切换。
【问题讨论】:
标签: sql oracle plsql alter-table