ストアドプロシージャとカーソルを使用して複数の行に対してSELECTを実行することについて少し混乱しています。SQLクエリ内でLIKE句を使用する必要があります。これが実際にストアドプロシージャで機能していることをテストしました。
SQL> /* THIS WORKS*/
SQL> create or replace procedure search_testimonials(
2 curRETURN OUT sys_refcursor
3 )
4 IS
5 begin
6 OPEN curRETURN FOR
7 SELECT testimonial
8 FROM testimonial
9 WHERE testimonial like '%like%';
10 END search_testimonials;
11 /
Procedure created.
SQL> variable buffer refcursor;
SQL> execute Search_Testimonials(:buffer);
PL/SQL procedure successfully completed.
SQL> print buffer;
TESTIMONIAL
--------------------------------------------------------------------------------
I like the way OAG does business. I will be a repeat customer
I like the Cashier named David. I think he is a hottie! Go AOGS
検索語の一部としてパラメータを使用しようとすると、問題が発生します。
SQL> /* THIS DOES NOT WORK*/
SQL> create or replace procedure search_testimonials(
2 search_term IN varchar2,
3 curRETURN OUT sys_refcursor
4 )
5 IS
6 begin
7 OPEN curRETURN FOR
8 SELECT testimonial
9 FROM testimonial
10 WHERE testimonial like search_term||'%%';
11 END search_testimonials;
12 /
Procedure created.
SQL>
SQL> execute Search_Testimonials('like', :buffer);
PL/SQL procedure successfully completed.
SQL> print buffer;
no rows selected
なぜこれが機能しないのかわかりません。また、@VARIABLE表記を使用して適切な用語を渡そうとしました。SQLPlusを使用してコードを実行しています。提案ありがとうございます。