2012-04-14 12 views
5

Pytanie jest podobne do korzystania LIKE w SQL * Plus, gdzie SELECT zawiera LIKE klauzuli następująco:Użyj zmiennej z "LIKE%" (np. "Zmienna%") w PL/SQL?

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

Jak można było korzystać z tego samego zasięgu kursora? Próbowałem przy użyciu następujących:

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

jw

EDIT: Muszę dostać coś jako parametr, znaczenia, SELECT jest wykonywany w ramach procedury przechowywanej.

EDIT 2:

create procedure proc1 (search VARCHAR) is 

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

--i wiedzieć używając „szukaj”% studentów pobiera nazwy zawierające „klucza wyszukiwania”, ale czy jest jakiś inny sposób na wykorzystanie takiej zmiennej.

do something; 

end; 

W skrócie, muszę wybrać nazwy studentów zawierające wartość, która jest przekazywana jako parametr; to może nie być cała nazwa i może wystarczyć na tyle, aby można było użyć w ramach podobnej klauzuli.

+1

Więc ... próbowałeś ... i * co się stało *? –

+0

Błąd ** brakujące wyrażenie ** – user980411

+0

Czy jesteś pewien * to jest przyczyna? 'CURSOR x IS {select}' powinno być poprawne, gdzie '{select}' reprezentuje dowolnie wybrany DQL. –

Odpowiedz

20

Zgodnie z moją wiedzą na temat Twojego problemu, w cudzysłowie używasz zmiennej search. Umieść swoją zmienną poza cudzysłowami, np .:

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;