BEGIN
exception
when others then
sqltext2:='insert into ERROR_TABLE_SHREE select '||str||' from dual;';
EXECUTE IMMEDIATE sqltext2;
end;
COMMIT;
我在异常阻止
中遇到以下错误ORA-00911: invalid character
答案 0 :(得分:5)
你没有字符串(我假设str
被声明为某些描述的字符)。如果你想插入一个字符串,你需要额外的引号,否则它将在这个实例中被解释为一个列。类似的东西:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
请注意我已从字符串末尾删除了分号;这不是必需的(可能是您错误的实际原因)。
值得注意的是,这有点SQL-injectiony ...你应该使用bind variables而不是连接;这都在the documentation中描述:
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
但是,在此上下文中不需要使用动态SQL;你可以简单地插入变量值:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
最后,我稍微关注你的COMMIT
;以这种方式处理错误后提交是不常见的。如果没有更多的上下文,就无法确定,但在autonomous transaction
答案 1 :(得分:0)
您不希望在构建的字符串中使用分号并传递给EXECUTE IMMEDIATE。
sqltext2:='insert into ERROR_TABLE_SHREE select '||str||' from dual';
我希望您没有真正使用WHEN OTHERS
异常处理程序启动块。我希望你有充分的理由在这里使用动态SQL,因为我没有看到它。