Oracle
 sql >> Base de données >  >> RDS >> Oracle

La requête Oracle ne se compile pas

Je pense que le problème est que l'instruction dynamique que vous essayez dans votre EXECUTE IMMEDIATE est une instruction SQL, pas une instruction PL/SQL. Et INTO n'est pas SQL, c'est PL/SQL.

Vous pouvez soit faire un SQL dynamique déclaration avec une seule variable de liaison, puis placez votre INTO en dehors de l'instruction dynamique. Ceci est pris en charge lors de l'exécution d'un SQL dynamique déclaration :

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;

Ou vous pouvez faire un PL/SQL dynamique bloc anonyme :

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;

Cette fois, le INTO doit être à l'intérieur de la chaîne dynamique et utiliser une variable de liaison, car avec le BEGIN et END; vous faites maintenant du PL/SQL dynamique .

Pour votre cas d'utilisation, je recommanderais la première option, faire du SQL dynamique et en plaçant le INTO après la chaîne de déclaration.