Oracle
 sql >> база данни >  >> RDS >> Oracle

Заявката на Oracle няма да се компилира

Мисля, че проблемът е, че динамичният оператор, който опитвате във вашия EXECUTE IMMEDIATE е SQL оператор, а не PL/SQL оператор. И INTO не е SQL, а PL/SQL.

Можете или да направите динамичен SQL израз само с една свързваща променлива и след това поставете своя INTO извън динамичното изявление. Това се поддържа при изпълнение на динамичен SQL изявление:

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;

Или можете да направите динамичен PL/SQL анонимен блок:

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;

Този път INTO трябва да е вътре в динамичния низ и да използва свързваща променлива, защото с BEGIN и END; сега работите динамично PL/SQL .

За вашия случай на употреба бих препоръчал първата опция, извършване на динамичен SQL и поставяне на INTO след низът на израза.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично задаване на началната стойност на последователността на Oracle

  2. Динамичен SQL LOOP

  3. Oracle SQL сравнява записи в таблица

  4. копиране от една база данни в друга с помощта на oracle sql developer - връзката неуспешна

  5. Как да считаме плана Explain за добър - Oracle 10G