Использовать переменную с LIKE% (например, переменную%) в PL/SQL?

Вопрос аналогичен использованию LIKE в SQL *PLUS, где оператор select содержит предложение LIKE следующим образом:

select * from sometable where somecolumn LIKE 'something%';

Как можно использовать то же самое в курсоре? Я попытался использовать следующее:

 cursor c is select * from sometable where somecolumn like 'something%'; 

то же, что и выше

РЕДАКТИРОВАТЬ: мне нужно получить что-то в качестве параметра, что означает, что оператор выбора выполняется внутри хранимой процедуры.

РЕДАКТИРОВАТЬ 2:

create procedure proc1 (search VARCHAR) is

cursor c is select student_name from students where student_name like 'search%';

-- Я знаю, что с помощью 'search%' извлекаются имена учеников, содержащие 'ключевой поиск', но есть ли другой способ использовать такую ​​переменную.

do something;

end;

Короче говоря, мне нужно выбрать имена учащихся, содержащие значение, которое передается в качестве параметра; это может быть не полное имя, и его может быть достаточно, чтобы использовать его в подобном предложении.


person user980411    schedule 14.04.2012    source источник
comment
Итак... вы попробовали... и что получилось?   -  person    schedule 14.04.2012
comment
Вы уверены, что это причина? CURSOR x IS {select} должно быть допустимым, где {select} представляет произвольный выбор DQL.   -  person    schedule 14.04.2012
comment
Я получаю переменную что-то в качестве параметра и использую ее внутри курсора.   -  person user980411    schedule 14.04.2012
comment
Опубликуйте полный (но минимальный) контекст, иллюстрирующий ошибку, чтобы другие могли попробовать. Я считаю, что в этом упрощении отсутствует важная часть. 'something%' — это просто литерал; никакие переменные не участвуют.   -  person    schedule 14.04.2012
comment
Публикация и сообщенное сообщение об ошибке и намерение не совпадают. Я обновил заголовок, чтобы дать ему некоторое направление. Нет смысла беспокоиться о CURSOR, пока вы не сможете сделать это с помощью обычного SELECT.   -  person    schedule 14.04.2012


Ответы (1)


Насколько я понимаю вашу проблему, вы используете переменную search в кавычках. Поместите свою переменную вне кавычек, например:

 create or replace procedure PROC1(search VARCHAR2) 
 IS
  cursor test_cur(search IN VARCHAR2)
   IS
    SELECT student_name 
    FROM student
    WHERE student_name LIKE search||'%'; --you're putting you variable within quotes

 v_temp_var student.student_name%TYPE;

BEGIN

 OPEN test_cur(search);
  LOOP
   FETCH test_cur INTO v_temp_var;
    EXIT WHEN test_cur%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE(v_temp_var);  
  END LOOP;

 CLOSE test_cur;

END test;
person Gaurav Soni    schedule 14.04.2012