Oracle中 type和 rowtype的區別

2021-07-16 19:43:30 字數 3977 閱讀 2834

在定義變數時處理可以使用oracle規定的資料型別外,還可以使用%type和%rowtype來定義變數.

%type型別的變數是專門為儲存在資料列中檢索到的值而建立的.對於使用%type建立的變數,其資料型別由系統根據檢索的資料列的資料型別決定.

%rowtype型別的變數,它可以一次儲存從資料庫檢索的一行資料。

當你不知道表中的資料型別是什麼時候?那你就考慮%type來解決此問題。

%type

sql> declare

2     empno emp.empno%type;

//宣告的時候一定要加上表的中列

3     ename emp.ename%type;

4     job   emp.job%type;

5  begin

6     select empno,ename,job into empno,ename,job from emp where empno='7369';

7     dbms_output.put_line(empno||'/'||ename||'/'||job);

8  end;

9  /

7369/smith/clerk

emp.empno%type;

解析:首先它到emp表中去查詢empno列 %type返回其資料的資料型別。

%type的好處:

1、 可移植性高(當我們對錶的資料型別發生改變時,使用者不必考慮定義變數型別)

2、 使用者不必檢視資料型別就可以定義變數能夠儲存檢索的資料。

%rowtype

sql> declare

2      row_data emp%rowtype;

3  begin

4     select * into row_data from emp where empno='7369';

5     dbms_output.put_line(row_data.empno||'/'||row_data.ename||'/'||row_data.job);

6  end;

7  /

注意:如果定義了%rowtype型別的變數,該變數的結構與定義表的結構完全相同,查詢時必須使用*或者列舉全部的字段資訊。

復合變數

復合變數可以將不同的資料型別的多個值儲存在乙個單元中.由於復合資料型別可以有使用者根據需要定義其結構,所以復合資料型別也稱為自定義資料型別。

pl/sql提供了兩種型別的復合資料型別:

1、 記錄型別

在記錄型別中可以儲存多個標量值,與資料庫中的行相似

2、 記錄表型別

允許使用者在程式**中使用」表

」,以便儲存多個行的資料。它只在程式執行期間有效。類似於程式**中集合|陣列。

記錄型別:

必須使用type語句定義記錄型別的語法宣告如下:

type record_name is record( f

ield_name data_type[not null, :=default value]

……… );

與%rowtype不同之處是

1、%rowtype查詢的是全部資料

2、記錄型別必須使用type語法格式宣告

//案例

sql> declare

2     type empinfo is record(

//宣告乙個記錄型別

3       empno number(4),

4       ename varchar2(10),

5       job  varchar2(9)

6     );

7  8   emp_data  empinfo;

//宣告乙個記錄型別的變數

9  begin

10    select empno,ename,job into emp_data from emp where empno=7369;

//查詢的結果賦值給定義的變數

11    dbms_output.put_line(emp_data.empno||'/'||emp_data.ename||'/'||emp_data.job);

12  end;

13  /

記錄表型別

它可以處理多個記錄或多個行記錄。

1、 為什麼使用記錄表型別呢?

因為我們查詢的資料的往往需要返回多行記錄,所以需要記錄表型別。

2、 定義記錄表型別

type table_name is table of data_type[not null] i

ndex by binary_integer;//主鍵的索引

declare

type table_emp is table of emp%rowtype //建立乙個表 此表的型別與emp表的型別一致

index by binary_integer;

type table_text is table of varchar2(20) //建立乙個表 此表具有乙個varchar2列的簡單表

index by binary_integer;

empt  table_emp; //宣告記錄表型別的變數

tabtext table_text;

begin

案例:sql> declare

2     type table_emp is table of emp%rowtype

3     index by binary_integer;

4     empt table_emp;

5  begin

6     empt(1).ename:='wangyi';

7     dbms_output.put_line(empt(1).ename);

8  end;

9  /

//返回總記錄

sql> declare

2     type table_emp is table of emp%rowtype

3     index by binary_integer;

4     empt table_emp;

5  begin

6     dbms_output.put_line(empt.count);

7  end;

8  /

0//沒有記錄

//刪除的操作

表名.delete(記錄數);

//檢索記錄變數 f

irst:獲取第乙個的索引 n

ext:下乙個的索引 但是必須有引數 l

ast:最後乙個的索引

sql> declare

2     type table_emp is table of emp%rowtype

3     index by binary_integer;

4     empt table_emp;

5     i number(2):=1;

6  begin

7      while i<10

8      loop

9        empt(i).ename:='wangyi';

10        i:=i+1;

11      end loop;

12  

13     dbms_output.put_line(empt.count);

14  

15     empt.delete(2);

16  

17     dbms_output.put_line(empt.count);

18  

19     dbms_output.put_line(empt.first);

20     dbms_output.put_line(empt.next(2));

21     dbms_output.put_line(empt.last);

22  end;

23  /

ORACLE中 TYPE和 ROWTYPE的使用

為了使乙個變數的資料型別與另乙個已經定義了的變數 尤其是表的某一列 的資料型別相一致,oracle 提供了 type 定義方式。當被參照的那個變數的資料型別改變了之後,這個新定義的變數的資料型別會自動跟隨其改變,容易保持一致,也不用修改 pl sql 程式了。當不能確切地知道被參照的那個變數的資料型...

ORACLE中 TYPE和 ROWTYPE的使用

為了使乙個變數的資料型別與另乙個已經定義了的變數 尤其是表的某一列 的資料型別相一致,oracle 提供了 type 定義方式。當被參照的那個變數的資料型別改變了之後,這個新定義的變數的資料型別會自動跟隨其改變,容易保持一致,也不用修改 pl sql 程式了。當不能確切地知道被參照的那個變數的資料型...

ORACLE中 TYPE和 ROWTYPE的使用

1 type 為了使乙個新定義的變數與另乙個已經定義了的變數 通常是表的某一列 的資料型別保持一致,oracle提供了 type的定義方式,當被參照的那個變數的資料型別發生改變時,那麼這個新定義的變數的資料型別也會隨之發生改變,這種定義方式類似與其他程式語言中的 var 其型別不由自己決定。而是由與...