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;