2.27.2012
if (..) then --then必须存在。
elsif (..) then --then必须存在
else
end if
2.28.2012
--分页查询
create table sale (month varchar2(20),sell number);
select * from (select * from (select rownum rn, month, sell from sale) t where rn >= 5) where rn <= 8 and (sell>= 1400 and sell <=1500);
--通过rowid删除表中重复数据
实现方法:
SQL> create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /
表已建立.
SQL> insert into a values( '1111 ', '1111 ');
SQL> insert into a values( '1112 ', '1111 ');
SQL> insert into a values( '1113 ', '1111 ');
SQL> insert into a values( '1114 ', '1111 ');
SQL> insert into a select * from a;
插入4个记录.
SQL> commit;
完全提交.
SQL> select rowid,bm,mc from a;
ROWID BM MC
------------------ ---- -------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111
查询到8记录.
查出重复记录
SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
ROWID BM MC
------------------ ---- --------------------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
删除重复记录
SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
删除4个记录.
SQL> select rowid,bm,mc from a;
ROWID BM MC
------------------ ---- --------------------
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111
3.12.2012
--分页查询数据
SELECT EMPno, ENAME, DNAME
FROM (SELECT e.*, ROWNUM rn
FROM (SELECT emp.empno, emp.ename,emp.deptno AS eee --这边如果没有as eee就会报错
, dept.deptno, dept.dname
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMP.HIREDATE ASC)e
WHERE ROWNUM <= 5)
WHERE RN > 2
3.13.2012
--三种游标的调用方法
DECLARE
V_CUR PKG_GET_VALUE.CUR_TYPE;
V_ROW_DATA EMP%ROWTYPE;
L_NO EMP.EMPNO%TYPE;
L_NAME EMP.ENAME%TYPE;
BEGIN
PKG_GET_VALUE.PRO_GET_ALL_DATA('emp', V_CUR);
/*
--法一
FETCH V_CUR
INTO V_ROW_DATA;
WHILE V_CUR%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(V_ROW_DATA.ENAME);
FETCH V_CUR
INTO V_ROW_DATA;
END LOOP;
CLOSE V_CUR*/
/*
--法二
LOOP
FETCH V_CUR
INTO V_ROW_DATA;
EXIT WHEN V_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_ROW_DATA.ENAME);
END LOOP;
CLOSE V_CUR;*/
--法三(隐式游标)
FOR XX IN (SELECT * FROM EMP) LOOP
SELECT EMPNO, ENAME
INTO L_NO, L_NAME
FROM EMP
WHERE XX.EMPNO = EMP.EMPNO;
DBMS_OUTPUT.PUT_LINE(L_NO || '|' || L_NAME);
END LOOP;
END;