不要な引用符を使用しています:
SQL> declare 2 mat_id varchar2(100) := 'X'; 3 searchString varchar2(100) := ''''||mat_id||'%'''; 4 searchString2 varchar2(100) := ''||mat_id||'%'; 5 num number; 6 begin 7 select count(1) 8 into num 9 from dual 10 where 'X' like searchString; 11 -- 12 dbms_output.put_line('1. num= ' || num); 13 -- 14 select count(1) 15 into num 16 from dual 17 where 'X' like searchString2; 18 -- 19 dbms_output.put_line('2. num= ' || num); 20 end; 21 / 1. num= 0 2. num= 1 PL/SQL procedure successfully completed. SQL>
プレ>動的 SQL を使用する場合は二重引用符が役立ちますが、静的クエリでは、検索する文字列の一部として引用符を含むパターンを探していることになります。