2012-04-14 10 views
5

La domanda è simile ad usare COME in SQL * Plus, dove un'istruzione select contiene una clausola COME come segue:Utilizzare una variabile con "LIKE%" (ad esempio "variabile%") in PL/SQL?

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

Come si potrebbe utilizzare la stessa all'interno di un cursore? Ho provato ad utilizzare il seguente:

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

come sopra

EDIT: Ho bisogno di ottenere qualcosa come parametro, significato, l'istruzione select viene eseguita all'interno di una stored procedure.

EDIT 2:

create procedure proc1 (search VARCHAR) is 

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

--I per mezzo 'di ricerca%' recupera i nomi degli studenti che contengono 'la chiave di ricerca', ma c'è qualche altro modo per utilizzare tale variabile.

do something; 

end; 

In breve, ho bisogno di selezionare i nomi degli studenti che contengono un valore che viene passato come parametro; questo potrebbe non essere il nome completo e potrebbe essere sufficiente per essere utilizzato all'interno di una clausola simile.

+1

Quindi ... hai provato ... e * cosa è successo *? –

+0

Errore ** espressione mancante ** – user980411

+0

Sei sicuro che * è la causa? 'CURSOR x IS {select}' dovrebbe essere valido, dove '{select}' rappresenta un DQL di selezione arbitraria. –

risposta

20

In base alla mia comprensione del problema, si utilizza la variabile search tra virgolette. Inserisci la tua variabile al di fuori delle virgolette, ad esempio

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; 
Problemi correlati