ORACLE数据检索
1,Select 语句:
SELECT select_list [ into variable_list]
FROM table_list
[WHERE where_clause]
[ORDER BY column_list]
(1)like操作符, _ %
(2)正则表达式元字符:
* :匹配0或多个值
. :一个有效字符
^ :在行的开始处进行模式匹配
[]:字符分组。
$ : 在行的结尾处结束匹配
\ :换码符
() : 字符串分组
| :分隔某组表达式的各个部分
例:where REGEXP_LIKE(last_name, '^har(d|t)man$', 'i');
i 表示区分大小写,能匹配的有hardman hartman
(3)ORACLE信息检索(IR)解决方案的核心组件是ORACLE TEXT。
oracle text 是一个文档/文本索引解决方案,有四种不同类型的索引,Context,CTXCAT,CTXRULE
为了能够使用Context索引,必须在查询中用contains操作符,语法:
select [score(label),] column_list
[ into variable_list]
From table_list
where CONTAINS ( column_name, ' search_string'[, label1])>0;
2,游标
游标指向称为PGA的一个内区域,不是直接指向数据。PGA用于存贮下列数据:查询语句返回的记录行,查询语
句处理和记录行数,指向共享池中已解析查询语句的一个指针。
如果打开游标后,数据又有变化,其变化不会反映到打开游标的结果中。
四种游标:显式游标,隐式游标,游标变量,游标子查询
(1)显式游标
1) 声明(在declearation处):
CURSOR cursor_name[ parameter_list]
[RETURN type]
is query
[FOR UPDATE [OF (column_list)][NOWAITE];
RETURN:指定要返回的数据类型
FOR update的作用是在游标打开后可以锁定记录
NOWAITE 表示打开游标时不获得独占锁
2) 打开(代码执行部分或异常处理部分):
OPEN cursor_name(parameter list);
游标一次只能有一条活动的记录,打开游标时第一条记录是活动记录
3) 获取记录
FETCH coursor_name INTO variable_name(s) | PL/SQL_record;
例:fetch auth_sur1 into v_first_name,v_2nd_name;
fetch auth_sur2 into auths;(auths authors%RowType)
4)关闭游标:一定要显式闭
close fetch_name;
5)游标的属性:
%FOUND 检查fetch是否取到了记录
%ISOPEN 检查游标是否处于打开状态
%NOTFOUNT 是否没找到记录
%ROWCOUNT 取到记录的行数
6)使用LOOP 遍历游标
OPEN auth_cur;
LOOP
fetch auth_cur into v_author;
EXIT when auth_cur%NOTFOUND;
dbms_output.put_line(v_author.last_name);
END LOOP;
CLOSE auth_cur;
-----------------------------------------
FOR v_author IN auth_cur --FOR..LOOP省去了OPEN,FETCH,CLOSE命令
LOOP
dbms_output.put_line(v_author.last_name);
END LOOP;
(2)隐式游标:
隐式游标由ORACLE 自动打开和关闭,Oracle每执行一条DML语句在内存中都会有一个游标,
这个游标同样有显式游标的属性 。只是游标名为SQL,如SQL%ROWCOUNT,SQL%NOTFOUND等。
(3)游标变量
Set serveroutput on;
declare
type book_typ IS REF COURSOR RETURN books%rowtype;
cv_books book_typ; --游标变量
v_books BOOKS%ROWTYPE;
begin
open cv_books FOR select * from books where isbn='121';
fetch cv_books into v_books;
close cv_books;
end;
(4)返回打开游标的数目的语句:
SELECT value from v$parameter where name='open_cursor';