Bạn không có chuỗi ở đó (tôi giả sử là str
được khai báo như một ký tự của một số mô tả). Nếu bạn muốn chèn một chuỗi, bạn cần thêm dấu ngoặc kép nếu không nó sẽ được hiểu là một cột trong trường hợp này. Một cái gì đó như:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Xin lưu ý rằng tôi đã xóa dấu chấm phẩy ở cuối chuỗi của bạn; điều này là không bắt buộc (và có thể là nguyên nhân thực sự gây ra lỗi của bạn).
Cũng cần lưu ý rằng đây là một bit SQL- tiêm chích ... bạn nên sử dụng biến ràng buộc hơn là nối; tất cả điều này được mô tả trong tài liệu :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Tuy nhiên, không cần sử dụng SQL động trong ngữ cảnh này; bạn có thể chỉ cần chèn giá trị biến:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Cuối cùng, tôi hơi lo lắng về COMMIT
của bạn; thật bất thường khi cam kết sau khi xử lý lỗi theo cách này. Nếu không có thêm ngữ cảnh thì không thể chắc chắn nhưng sẽ bình thường hơn nếu ghi nhật ký lỗi được thực hiện trong giao dịch tự trị