Vấn đề là ;
ký tự trong 'SELECT * FROM DUAL;'
.
Từ tài liệu :
execute_immediate_statement ::=
EXECUTE_IMMEDIATE dynamic_string
{
INTO { define_variable [, define_variable ...] | record_name }
| BULK COLLECT INTO { collection_name [, collection_name ...] | :host_array_name }
}
[ USING [ IN | OUT | IN OUT ] bind_argument
[, [ IN | OUT | IN OUT ] bind_argument] ... ] [ returning_clause ] ;
... ở đâu dynamic_string
là (nhấn mạnh của tôi):
Vì nó sẽ không chấp nhận nhiều câu lệnh trừ khi bạn đặt chúng trong một khối PL / SQL duy nhất, nên ;
dấu phân cách không được mong đợi.
Có một lời giải thích tốt hơn tại Sử dụng Tuyên bố THỰC HIỆN NGAY LẬP TỨC trong PL / SQL :