您的测试代码不使用动态SQL,这是生成ORA-00957错误所必需的。如果没有动态SQL,Oracle会在编译块时抛出ORA-00957,我认为你实际上误解为Oracle 赛跑 您阻止并跳过异常处理程序。
请尝试将其作为测试(确保在客户端中启用了DBMS输出!):
DECLARE -- e_duplicate_column exception; -- pragma exception_init(e_duplicate_column,-957); BEGIN execute immediate q'[insert into animal(id, animal_name, animal_name) values(1000003, 'animal 1000003', 'animal 1000003')]'; EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLCODE); dbms_output.put_line(SQLERRM); END;
-957 ORA-00957: duplicate column name