Oracle資料庫零散知識02

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.