0

ストアドプロシージャとカーソルを使用して複数の行に対して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を使用してコードを実行しています。提案ありがとうございます。

4

1 に答える 1

2

変化する

 WHERE testimonial like search_term||'%%'

 WHERE testimonial like '%'|| search_term||'%'
于 2013-03-24T18:46:04.897 に答える