plsql开发子程序与包之前的简单回顾

--demo1

SELECT 

  IF t1.user_id='1' THEN '2012' 

  ELSIF t1.user_id='2' THEN '2013'

  ELSE '2015'

  END IF

FROM ts_user t1;

--demo2

SELECT 

  CASE t1.user_id 

  WHEN '1' THEN '2012' 

  WHEN '2' THEN '2013'

  WHEN '3' THEN '2014'

  ELSE '2015'

  END CASE

FROM ts_user t1;

--demo3

SELECT DECODE(t1.user_id,'1002','2012','1003','2013','1004','2013') 

FROM ts_user t1 

WHERE user_id IN('1002','1003','1004');

--demo4

SELECT 

  CASE  

  WHEN t1.user_id='1' THEN '2012' 

  WHEN t1.user_id='2' THEN '2013'

  WHEN t1.user_id='3' THEN '2014'

  ELSE '2015'

  END CASE

FROM ts_user t1;

--demo5

DECLARE

  v_i NUMBER:=0;

BEGIN

  LOOP

    v_i:=v_i+1;

    dbms_output.put_line(v_i);

    EXIT WHEN v_i=10;

  END LOOP;

END;

--demo6

DECLARE

  v_i NUMBER:=0;

BEGIN

  WHILE v_i<=10 LOOP

    dbms_output.put_line(v_i);

    v_i:=v_i+1;

  END LOOP;

END;

--demo7

BEGIN

  FOR i IN REVERSE 1..10 LOOP

    dbms_output.put_line(i);

  END LOOP;

END;

/

--demo8

BEGIN

  FOR i IN 1..10 LOOP

    dbms_output.put_line(i);

  END LOOP;

END;

/

--demo9

BEGIN

  FOR i IN 1..3 LOOP

    dbms_output.put('i:'||i);

    FOR j IN 1..2 LOOP

      dbms_output.put(' j:'||j);

    END LOOP;

    dbms_output.put_line('');

  END LOOP;

END;

/

--demo10

BEGIN

  <<outer>>

  FOR i IN 1..3 LOOP

    dbms_output.put('i:'||i);

    <<inner>>

    FOR j IN 1..2 LOOP

      dbms_output.put(' j:'||j);

      EXIT outer WHEN i=2;

      EXIT inner WHEN j=1;

    END LOOP;

    dbms_output.put_line('');

  END LOOP;

END;

/

--demo11

SELECT 

  CASE  

  WHEN t1.user_id='1' THEN '2012' 

  WHEN t1.user_id='2' THEN '2013'

  WHEN t1.user_id='3' THEN '2014'

  ELSE NULL

  END CASE

FROM ts_user t1;



EXTEND

TRIM

DELETE

EXISTS

COUNT

FIRST

LAST

PRIOR

NEXT



:=

NULL



SET

MULTISET UNION

MULTISET UNION DISTINCT

MULTISET INTERSECT

MULTISET EXCEPT



IS NULL

IS EMPTY

=

CARDINALITY

MEMBER OF

SUBMULTISET OF

IS A SET



FORALL

FORALL i IN DICICES

FORALL i IN VALUES

BULK COLLECT--SELECT INTO,FETCH INTO,DML返回子句



隐含游标

SQL%FOUND

SQL%NOTFOUND

SQL%ISOPEN

SQL%ROWCOUNT



显示游标

游标

DECLARE

CURSOR emp_cursor IS SELECT ename FROM emp WHERE eno:=&no;

v_ename ename%TYPE;

BEGIN

OPEN CURSOR;

LOOP

  FETCH emp_cursor INTO v_ename

  dbms...

END LOOP;

CLOSE CURSOR;

END;



DECLARE

CURSOR emp_cursor IS SELECT ename FROM emp WHERE eno:=&no;

TYPE ename_table_type IS TABLE OF emp.ename%TYPE;

ename_table ename_table_type;

BEGIN

OPEN CURSOR;

  FETCH emp_cursor BULK COLLECT INTO ename_table;

CLOSE CURSOR;

END;



FETCH .. BULK COLLECT INTO ... LIMIT ..;



CURSOR emp_cursor IS SELECT ename,sal FROM emp;

emp_record emp_cursor;

BEGIN

    OPEN emp_cursor;

    LOOP

      FETCH emp_cursor INTO emp_record;

      EXIT WHEN emp_cursor%NOTFOUND;

  END LOOP;

END;



CURSOR emp_cursor(no NUMBER) IS ...



CURSOR emp_cursor(no NUMBER) IS ... FOR UPDATE

UPDATE ... WHERE CURRENT OF emp_cursor;



FOR emp_record INTO emp_cursor LOOP

...

END LOOP;



TYPE emp_cursor_type IS REF CURSOR RETURN emp_table_type;

emp_cursor emp_cursor_type;

BEGIN

    OPEN emp_cursor FOR SELECT ename,sal FROM ... WHERE ...;

END;



CURSOR ... IS(SELECT dname,CURSOR(SELECT ename,sal FROM emp WHERE deptno=a.deptno) FROM emp WHERE ...);



e_integrity EXCEPTION;

PRAGMA EXCEPTION_INIT(e_integrity,-2019);



WHEN e_integrity THEN



IF SQL%NOTFOUND THEN

  RAISE e_integrity;

END IF;



RAISE_APPLICATION_ERROR(-20001,'雇员无补助');



ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';

ALTER SYSTEM SET PLSQL_WARNINGS='ENABLE:ALL';

SET SERVEROUTPUT ON;

 

你可能感兴趣的:(plsql)