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.