嗨 甲骨文【1】
最後更新:2017-02-28
來源:互聯網
上載者:User
【序】
為了在工作中寫預存程序,。同時,我準備寫學習《精通Oracle 10g PL/SQL編程》(水利水電)一書的學習筆記。
這些你能不能寫全:
Data Query Language--SELECT
Data Manipulation Language--INSERT,UPDATE,DELETE
Transactional Control Language--COMMIT,ROLLBACK,SAVEPOINT
Data Definition Language--CREATE TABLE,ALTER TABLE,DROP TABLE
Data Control Language--GRANT,REVOKE
一次應聘面試中,我就沒能答出此類問題。想來只有慚愧,無他。
PL/SQL能將SQL語句組合成塊,一次傳輸,降低了網路開銷,此等高效,往日用SQL Server時可沒這等好事。
PL/SQL塊結構
DECLARE
/*定義部分*/
BEGIN
/*執行部分*/
EXCEPTION
/*例外處理部分*/
END; /*塊結束標記,此處有分號*/
/ /*這是命令列中的結束符*/
四大塊類型
匿名塊、命名塊、子程式(過程、函數、包)、觸發器
四大變數類型
標量(Scalar)、複合(Composite)、參照(Reference)、LOB(Large Object)
Composite:PL/SQL記錄、PL/SQL表、巢狀表格、VARRAY
參照:遊標變數(REF CURSOR)、 物件類型變數(REF obj_type)
LOB:內部LOB(CLOB,BLOB,NCLOB)、外部LOB(BFILE)
DECLARE
v_num NUMBER(6,2); ß變數定死了長度,將來無法動態改變,只能手動修改
v_num tbl.num%TYPE; ß動態確定新的類型和長度
挺像Delphi: 1 變數賦值 := 2記錄 RECORD
在命令列中寫SQL語句時注意:單條結束要用; 模組結束要用/ 才能顯示你的查詢
不重複顯示查詢:SELECT DISTINCT *FROM A_TBL
處理NULL:NVL(expr1,expr2) 如果expr1是null則返回expr2;如果不是則返回expr1兩者類型要匹配
刪除表資料並釋放空間:TRUNCATE TABLE
Oracle不允許其他使用者讀取髒資料(未提交事務),確保資料庫資料的讀一致性
加鎖,確保同一時間對檔案的操作只能有一人
Savepoint 用於取消部分事務,事務結束後自動刪除所有儲存點。
唯讀事務:SET TRANSACTION READ ONLY;
或者:exec dbms_transaction.read_only
分組函數
MAX、MIN、AVG、SUM、COUNT、VARIANCE(方差)、STDDEV(標準差)
GROUP BY用於對查詢結果進行分組統計――比如每組最大值
HAVING用於限制分組顯示結果――比如最大值小於2800
ROLLUP在原統計結果基礎上產生橫向小統計
CUBE在原統計結果基礎上產生縱向小統計
Oracle的流程式控制制語句
IF語句
IF THEN
ELSIF THEN
ELSE
END IF;
CASE語句(9i)
CASE
WHEN THEN
ELSE
END CASE;
基本迴圈
LOOP
EXIT[WHEN ];
END LOOP;
WHILE迴圈
WHILE LOOP
END LOOP;
FOR 迴圈
FOR _v in[REVERSE] lo..hi LOOP
END LOOP;