[oracle]7788

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;


你可能感兴趣的:(oracle,sql,table,delete,insert)