2012-04-14 13 views
5

La pregunta es similar al uso de COMO en SQL * PLUS, donde una sentencia select contiene una cláusula COMO de la siguiente manera:¿Utiliza una variable con "LIKE%" (por ejemplo, "% variable") en PL/SQL?

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

¿Cómo se podría utilizar la misma dentro de un cursor? He intentado utilizar el siguiente:

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

mismo que el anterior

EDIT: Tengo que conseguir algo como parámetro, es decir, la instrucción SELECT se ejecuta dentro de un procedimiento almacenado.

EDIT 2:

create procedure proc1 (search VARCHAR) is 

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

--Yo sé usando '% de la búsqueda' recupera nombres de los estudiantes que contienen 'la clave de búsqueda', pero ¿hay alguna otra manera de utilizar dicha variable.

do something; 

end; 

En resumen, necesito seleccionar nombres de estudiantes que contengan un valor que se pasa como parámetro; este puede no ser el nombre completo, y puede ser suficiente para ser utilizado dentro de una cláusula similar.

+1

Entonces ... lo intentó ... y * ¿qué pasó *? –

+0

Error ** expresión faltante ** – user980411

+0

¿Estás seguro * esa es * la causa? 'CURSOR x IS {select}' debe ser válido, donde '{select}' representa una selección arbitraria de DQL. –

Respuesta

20

Según tengo entendido su problema, está utilizando la variable search entre comillas. Coloque su variable fuera de las comillas, por ejemplo:

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; 
Cuestiones relacionadas