v_name varchar2(10) := 'hj'; CURSOR cur_query is select a.name from t_name a, t_dep b where a.id = b.id AND regexp_like(a.name,'*hj*') rec_query cur_query%ROWTYPE; 用正则试试
CURSOR cur_query is select a.name from t_name a, t_dep b where a.id = b.id AND regexp_like(a.name,'*'||v_name||'*') rec_query cur_query%ROWTYPE; 这样写
刚试了下用引用游标也是可以很快查出数据,不过悲剧的是楼主用的客户端貌似不支持这个,编译不过....v_sql varchar2(4000) := 'select a.name from t_name a, t_dep b where a.id = b.id and a.name like ''%' || hj || '%''';
open ref_cur_name for v_sql;
可能是变量的问题。可以在v$sql_plan中查看两条语句的执行计划有何不同 数据量大的情况下like '%xx%'的写法效率很差 在这个场景里,如果是因为变量的原因,想让SQL语句像第一条那样执行,试试这么写DECLARE v_name varchar2(10) := 'hj'; cur_query sys_refcursor; type rec is record(name varchar2(1000)); rec_query rec;BEGIN open cur_query for 'select a.name from t_name a, t_dep b ' ||'where a.id = b.id ' ||'and a.name like ''%' || v_name || '%'''; loop FETCH cur_query INTO rec_query.name; exit when cur_query%NOTFOUND; END LOOP; close cur_query; END; /
这个方法楼主刚试了,可行 不过我的代码是写在oracle form 9i里面,编译的时候报不支持open cur_query for 的特性,郁闷
CURSOR cur_query is
select a.name from t_name a, t_dep b
where a.id = b.id
AND regexp_like(a.name,'*hj*')
rec_query cur_query%ROWTYPE;
用正则试试
select a.name from t_name a, t_dep b
where a.id = b.id
AND regexp_like(a.name,'*'||v_name||'*')
rec_query cur_query%ROWTYPE;
这样写
问题是第二个语句用的变量是hj,上面并没有定义这个变量,应该会报错的。是手误呢,还是说执行的语句不是这样的?
v_name
这个可以确认是一样的,因为第二个代码半小时左右后会输出结果,数据量也是两条。
第二条语句卡住的时候到数据库查了下正在执行的sql,貌似也没有问题,把like换成=号,然后去掉前后两个%号也可以很快查出数据...
感觉是like 和 两个%的问题,晕死
where a.id = b.id
and a.name like ''%' || hj || '%''';
open ref_cur_name for v_sql;
数据量大的情况下like '%xx%'的写法效率很差
在这个场景里,如果是因为变量的原因,想让SQL语句像第一条那样执行,试试这么写DECLARE
v_name varchar2(10) := 'hj';
cur_query sys_refcursor;
type rec is record(name varchar2(1000));
rec_query rec;BEGIN
open cur_query for 'select a.name from t_name a, t_dep b '
||'where a.id = b.id '
||'and a.name like ''%' || v_name || '%''';
loop
FETCH cur_query INTO rec_query.name;
exit when cur_query%NOTFOUND;
END LOOP;
close cur_query;
END;
/
不过我的代码是写在oracle form 9i里面,编译的时候报不支持open cur_query for 的特性,郁闷