標籤:
15,函數的建立,要求必須有傳回值,必須在語句中調用,需要多個傳回值時,使用out參數類型,在user_procedures表中查詢屬性,在user_source表中查詢原始碼,建立樣本:
CREATE OR REPLACE FUNCTION my_function_01--建立函數(v_01 IN NUMBER)--參數列表RETURN NUMBER--傳回型別is--標識res NUMBER;--變數的聲明BEGIN--函數主體 res := v_01; RETURN res;--傳回值 END;
16,異常,分為預定義異常(有名字,有編號),非預定義異常(有編號無名字),自訂異常(無名字無編號),兩個常用異常,no_data_found,too_many_rows聲明及處理自訂異常樣本:
DECLARE my_exp EXCEPTION;--聲明一個異常 PRAGMA EXCEPTION_INIT (my_exp,-20113);--關聯異常編號 20000-20999; BEGIN RAISE my_exp;--拋異常使用raise EXCEPTION--語句中異常處理部分 WHEN my_exp THEN--擷取異常 when .. then ..// when others then.. dbms_output.put_line(‘my exception‘); END;
17,pl/sql中可以直接使用dml,dql語言,使用ddl語言時需要使用 execute immediate 關鍵字;樣本:
DECLAREv_str VARCHAR2(30);BEGIN v_str := ‘create table stu(id number)‘;--dml語句 EXECUTE IMMEDIATE v_str;--使用關鍵字 END;
18,遊標分靜態資料指標與ref遊標,靜態分為顯式遊標和隱式遊標,顯式遊標使用需要四個步驟,單行迴圈提取樣本:
DECLARE CURSOR cursor_01--聲明一個無參數遊標 IS SELECT * FROM student; v_stu student%ROWTYPE;--單行接收 BEGIN OPEN cursor_01;--開啟遊標 LOOP FETCH cursor_01 INTO v_stu;--從遊標中提取 EXIT cursor_01%NOTFOUND; ..... CLOSE cursor_01;--關閉遊標 END;
使用多行迴圈提取到表提高效率樣本:
DECLARE CURSOR cursor_01--聲明一個無參數遊標 IS SELECT * FROM student;TYPE tab IS TABLE OF student%ROWTYPE;v_stu tab;--表接收 BEGIN OPEN cursor_01;--開啟遊標 LOOP FETCH cursor_01 BULK COLLECT INTO v_stu LIMIT 2;--從遊標中提取,每次提取兩行 dbms_output.put_line(v_stu(1).sno);--取兩行其中一行資料 EXIT cursor_01%NOTFOUND; ..... CLOSE cursor_01;--關閉遊標 END;
使用cursor for loop 簡化查詢:
DECLARE CURSOR cursor_01--聲明一個無參數遊標 IS SELECT * FROM student; BEGIN OPEN cursor_01;--開啟遊標 FOR cur IN cursor_01 --cursor for loop LOOP EXIT cursor_01%NOTFOUND; dbms_output.put_line(cur.sno); ..... CLOSE cursor_01;--關閉遊標 END;
帶參數遊標主要是為了限制查詢條件:
DECLARECURSOR cursor_01 (sn VARCHAR2(4))ISSELECT * FROM student WHERE sname LIKE ‘%‘||sn||‘%‘;--限制查詢條件
隱式遊標,預設名為sql,select into或dml操作會產生隱式遊標,其屬性值是最新執行的sql語句,對資料有影響sql%found則為true。
19,複合類型的變數聲明,記錄類型樣本:
DECLARE TYPE re IS RECORD--記錄類型(v_id student.sno%TYPE,--單欄位類型v_sname VARCHAR2(10));BEGIN SELECT sno , sname INTO re FROM Student; ......
直接單行表型別宣告:
DECLARE v_stu student%ROWTYPE;--單行類型
索引表示例:
DECLARE TYPE tab IS TABLE OF Student%ROWTYPE--索引表類型 INDEX BY BINARY_INTEGER; t_stu tab;
Varray變長數組:
DECLARE TYPE arr IS VARRAY(100) OF VARCHAR2(20);--變長數組,100大小 v_arr arr := arr(‘1‘,‘2‘);--初始兩個元素
20,視圖的建立樣本:
CREATE OR REPLACE VIEW view_name AS SELECT * FROM Student;
Oracle資料庫零散知識02