2
我想在ref_cursor中得到結果,但我無法做到這一點。Ref cursor with Execute immediate
請建議我如何ref_cursor結果利用執行即時
CREATE OR REPLACE PROCEDURE TEST_PROC_QT (p_name IN VARCHAR2,
p_result_set OUT sys_refcursor) IS
v_sql VARCHAR2(4000);
BEGIN
v_sql := '';
v_sql := 'SELECT * FROM USERS WHERE 1=1 ';
IF p_name is not null THEN
v_sql := v_sql || ' AND login_id = :v_name';
ELSE
v_sql := v_sql || ' AND ((1=1) or :v_name is null)';
END IF;
Dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql
--OPEN p_result_set for v_sql
--INTO p_result_set using p_name;
END;
完全無關,但寫作的查詢(不執行即時)的一個更好的方法是:「SELECT * FROM USERS WHERE LOGIN_ID = NVL(: v_name,login_id)' –
@Thomas Jones-Low:如果您在該專欄中有索引,那不會奏效。 – Robotron