Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn Oracle sẽ không biên dịch

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 BEGINEND; 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi định dạng ngày trong cơ sở dữ liệu oracle

  2. Hàm NEXT_DAY () trong Oracle

  3. Bắt đầu với Cơ sở dữ liệu tự trị của Oracle trên Đám mây

  4. Làm thế nào để nối các hàng được phân tách bằng dấu cách trong oracle?

  5. Làm cách nào để tôi tự động đặt lại giá trị của chuỗi về 0 mỗi năm trong Oracle 10g?