oracle學習之路(四),oracle學習之路

來源:互聯網
上載者:User

oracle學習之路(四),oracle學習之路
LOB類型

ORACLE提供了LOB (Large OBject)類型,用於儲存大的資料對象的類型。ORACLE目前主要支援BFILE, BLOB, CLOB 及 NCLOB 類型。

  • NCLOB

    儲存大的NCHAR字元資料類型。每個變數儲存大字元對象的位置,該位置指到大字元資料塊。大字元對象的大小<=4GB。

  • CLOB(Book)

    儲存大的字元資料類型。每個變數儲存大字元對象的位置,該位置指到大字元資料塊。大字元對象的大小<=4GB。

  • BLOB(Photo)

    儲存大的位元據類型。變數儲存大的二進位對象的位置。大二進位對象的大小<=4GB。

  • BFILE (Movie)

    存放大的位元據對象,這些資料檔案不放在資料庫裡,而是放在作業系統的某個目錄裡,資料庫的表裡只存放檔案的目錄。

BIND 變數

 綁定變數是在主機環境中定義的變數。在PL/SQL 程式中可以使用綁定變數作為他們將要使用的其它變數。為了在PL/SQL 環境中聲明綁定變數,使用命令VARIABLE。例如:

VARIABLE return_code NUMBERVARIABLE return_msg VARCHAR2(20)

可以通過SQL*Plus命令中的PRINT 顯示綁定變數的值。例如:

PRINT return_codePRINT return_msg
PL/SQL 表(TABLE)

  定義記錄表(或索引表)資料類型。它與記錄類型相似,但它是對記錄類型的擴充。它可以處理多行記錄,類似於進階中的二維數組,使得可以在PL/SQL中模仿資料庫中的表。
  定義記錄表類型的文法如下:

TYPE table_name IS TABLE OF element_type [NOT NULL]INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2]

EXISTS(n)如果集合的第n個成員存在,則返回true
COUNT返回已經分配了儲存空間即賦值了的成員數量
FIRST:返回成員的最低下標值
LAST:返回成員的最高下標值
PRIOR(n)返回下標為n的成員的前一個成員的下標。如果沒有則返回NULL
NEXT(N)返回下標為n的成員的後一個成員的下標。如果沒有則返回NULL
TRIM:刪除末尾一個成員
TRIM(n) :刪除末尾n個成員
DELETE:刪除所有成員
DELETE(n) :刪除第n個成員
DELETE(m, n) :刪除從n到m的成員
EXTEND:添加一個null成員
EXTEND(n):添加n個null成員
EXTEND(n,i):添加n個成員,其值與第i個成員相同
LIMIT返回在varray類型變數中出現的最高下標值

  • 第一個例子
    聲明一個表類型,一個數字進行迴圈,第一個迴圈通過四次迴圈,往表類型數組中插入4條記錄,第二個迴圈通過迴圈整個表數組,輸出我們所需要的資料,
DECLARE  TYPE dept_table_type IS TABLE OF  dept%ROWTYPE INDEX BY BINARY_INTEGER;  my_dname_table dept_table_type;  v_count number(2) :=4;BEGIN  FOR int IN 1 .. v_count LOOP    SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10;  END LOOP;  FOR int IN my_dname_table.FIRST .. my_dname_table.LAST LOOP  DBMS_OUTPUT.PUT_LINE('Department number: '||my_dname_table(int).loc);  DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dname_table(int).dname);  END LOOP;END;
  • 第二個例子
    寫一個一維數組,賦值,並迴圈輸出
declare   --定義記錄表資料類型  TYPE reg_table_type IS TABLE OF varchar2(25)  INDEX BY BINARY_INTEGER;  --聲明記錄表資料類型的變數  v_reg_table reg_table_type;  i int :=1;begin  v_reg_table(1):='李岩昊1';   v_reg_table(2):='李岩昊2';    v_reg_table(3):='李岩昊3';     v_reg_table(4):='李岩昊4';      v_reg_table(5):='李岩昊5';      FOR INT IN  i .. v_reg_table.LAST LOOP        DBMS_OUTPUT.put_line('我第'||i||'個名字'||v_reg_table(i));          i:=i+1;        END LOOP;end;
  • 第三個例子:按二維數組使用記錄表
declare --定義記錄表資料類型   TYPE employee_table_type IS TABLE OF t_employee%ROWTYPE   INDEX BY  BINARY_INTEGER;   --聲明記錄表資料類型的變數   my_employee_table employee_table_type;   i int :=1;begin  SELECT fnumber,fname,fage,fsalary  INTO   my_employee_table(1).fnumber,my_employee_table(1).fname,my_employee_table(1).fage,my_employee_table(1).fsalary  FROM   t_employee  WHERE t_employee.fnumber='DEV002';  SELECT fnumber,fname,fage,fsalary  INTO   my_employee_table(2).fnumber, my_employee_table(2).fname, my_employee_table(2).fage, my_employee_table(2).fsalary  FROM t_employee  WHERE t_employee.fnumber='SALES001';  FOR int IN i .. 2 LOOP   Dbms_Output.put_line('僱員     DEV002:'||my_employee_table(i).fname);   i:=i+1;  END LOOP;end;

相關文章

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.