標籤:
1、with-as-select文法:相當於暫存資料表
with t as (select * from emp where deptno=10)
select * from t;
2、case文法和decode文法
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
1 select( 2 case ename 3 when ‘SMITH‘ then ‘史密斯‘ 4 when ‘ALLEN‘ then ‘艾倫‘ 5 else ename 6 end 7 ) as "姓名" 8 from emp ; 9 10 select decode(ename,‘SMITH‘,‘史密斯‘,‘ALLEN‘,‘艾倫‘,ename) from emp;
3、execute immediate
oracle中DBMS_SQL package包和EXECUTE IMMEDIATE都可以用來解析並執行動態SQL語句或非運行時建立的PL/SQL塊,
相比較而言,EXECUTE IMMEDIATE使用較簡單,能夠滿足較常用的需要
EXECUTE IMMEDIATE v_sql [BULK COLLECT INTO 或INTO 傳回值變數] [INTO 入參 1,.., out 出參1,..]
1 DECLARE 2 v_sql VARCHAR2(1000); 3 v_table VARCHAR2(30) := ‘test_dynamic_sql‘; 4 BEGIN 5 v_sql := ‘ create table ‘ || v_table || 6 ‘ (id varchar2(10),name varchar2(100))‘; 7 EXECUTE IMMEDIATE v_sql; 8 END; 9 DECLARE 10 v_sql VARCHAR2(1000); 11 v_table VARCHAR2(30) := ‘test_dynamic_sql‘; 12 BEGIN 13 --1、綁定輸入變數 14 v_sql := ‘ insert into ‘ || v_table || ‘ values (:1,:2)‘; 15 EXECUTE IMMEDIATE v_sql 16 USING ‘2‘, ‘binding_in_variable‘; --使用using綁定輸入變數 17 END;
4、nvl()和nvl2()
nvl(COMMISSION_PCT,0)
如果第一個參數為null,則返回第二個參數
如果第一個參數為非null,則返回第一個參數
NVL2(COMMISSION_PCT,‘SAL_COMM‘,‘SAL‘)
如果第一個參數為null,則返回第三個參數
如果第一個參數為非null,則返回第二個參數
nullif(length(first_name),length(last_name))
如果兩個參數值相等,則返回 null
如果兩個參數不等,則返回第一個運算式值
COALESCE(EXPR1,EXPR2,EXPR3...EXPRn)
從左往右數,遇到第一個非null值,則返回該非null值。
5、connect by用法
http://blog.csdn.net/chiclewu/article/details/15027245
http://blog.csdn.net/fw0124/article/details/6775163
http://blog.csdn.net/leshami/article/details/5616877
1 select * from emp2 start with empno=78393 connect by prior empno = mgr;
--prior表示前一條記錄,即下一條返回記錄的mgr應當等於前一條記錄的empno
Oracle預存程序