--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;