S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

oracle 搜索库中任意数据

Posted on 2009-04-02 23:03 S.l.e!ep.¢% 阅读(228) 评论(0)  编辑 收藏 引用 所属分类: Oracle
提供的代码仅供测试,实际应用需要作少量修改
示例如下:

 1 create or replace procedure search(v_colname in varchar2, v_find in varchar2as
 2   v_sql varchar2(2000);
 3   v_result varchar2(1000);
 4   v_cursor number;
 5   v_stat number;
 6 begin
 7   dbms_output.put_line('表名,列名,结果');
 8   for a in (select table_name,column_name from user_tab_columns where column_name = v_colname) loop
 9       v_cursor := dbms_sql.open_cursor;
10       v_sql := 'select ' || v_colname || ' from ' || a.table_name || ' where ' || v_colname || ' like ''%' || v_find || '%''';
11       dbms_sql.parse(v_cursor,v_sql,dbms_sql.native);
12       dbms_sql.define_column(v_cursor,1,v_result,1000);
13       v_stat := dbms_sql.execute(v_cursor);
14       loop exit when dbms_sql.fetch_rows(v_cursor)<=0;
15            dbms_sql.column_value(v_cursor,1,v_result);
16            dbms_output.put_line(a.table_name||','||a.column_name||','||v_result);
17       end loop;
18       dbms_sql.close_cursor(v_cursor);
19   end loop;
20 end search;
21 

在oracle 10g下测试通过.
使用方法:
begin search('...','...'); end;
/
第一个参数是知道的列名,第二个参数是需要查找的数据

下面是执行效果:
 1 SQL> begin search('答案','试题规范'); end;
 2   2  /
 3  
 4 表名,列名,结果
 5 数据值答案表,答案,面试试题规范。
 6 数据值答案表,答案,进一步完善面试试题规范。
 7 数据值答案表,答案,修改考核试题规范。
 8 数据值答案表,答案,进一步完善考核试题规范。
 9 数据值答案表,答案,考核试题规范有误。
10 数据值答案表,答案,修改考核高级试题规范。
11 数据值答案表,答案,考核高级试题规范快速分页规范,修改错误页面。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理