2012-04-14 350 views
5

問題是類似於SQL * PLUS,其中一個SELECT語句包含一個LIKE條款如下使用LIKE在PL/SQL中使用帶有「LIKE%」(例如「variable%」)的變量?

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

一個人怎麼能使用同樣的遊標內?我嘗試使用以下:

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

同上

編輯:我需要得到東西作爲參數,這意味着,select語句是一個存儲過程中執行。

編輯2:

create procedure proc1 (search VARCHAR) is 

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

- 我知道使用「搜索%」檢索包含「關鍵搜索」學生的名字,但有使用這樣的變量任何其他方式。

do something; 

end; 

總之,我需要選擇包含作爲參數傳遞的值的學生名稱;這可能不是整個名稱,並且可能足以在類似的子句中使用。

+1

所以...你試過它... *什麼事*? – 2012-04-14 03:35:01

+0

錯誤**缺少表達式** – user980411 2012-04-14 03:38:12

+0

您確定*這是*原因嗎? 'Cursor x IS {select}'應該是有效的,其中'{select}'表示一個任意選擇的DQL。 – 2012-04-14 03:43:16

回答

20

根據我對您的問題的理解,您在引號內使用變量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;