Tôi nghĩ rằng vấn đề là câu lệnh động mà bạn đang thử trong EXECUTE IMMEDIATE là một câu lệnh SQL, không phải là một câu lệnh PL / SQL. Và INTO không phải là SQL, nó là PL / SQL.
Bạn có thể thực hiện một SQL động câu lệnh chỉ với một biến liên kết và sau đó đặt INTO của bạn bên ngoài câu lệnh động. Điều này được hỗ trợ khi thực hiện SQL động tuyên bố:
execute immediate 'select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end from DUAL'
into varResult
using IN varSampleCode;
Hoặc bạn có thể thực hiện PL / SQL động khối ẩn danh:
execute immediate 'begin select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end into :varresult from DUAL; end;'
using IN varSampleCode, OUT varResult;
Lần này INTO phải ở bên trong chuỗi động và sử dụng biến liên kết, vì với BEGIN và END; bây giờ bạn đang thực hiện PL / SQL động .
Đối với trường hợp sử dụng của bạn, tôi khuyên bạn nên chọn tùy chọn đầu tiên, thực hiện SQL động và đặt INTO sau chuỗi câu lệnh.