PL SQL 變數與常用資料型別

2021-06-08 08:10:23 字數 4137 閱讀 3866

以oracle8i為例,可以使用的基礎資料型別有:

型別子類

說     明

範   圍

oracle限制

char

character

string

rowid

nchar

定長字串

民族語言字符集

0à32767

可選,確省=1

varchar2

varchar, string

nvarchar2

可變字串

民族語言字符集

0à32767

binary_integer

帶符號整數,為整數計算優化效能

number(p,s)

decdouble precision

integer

intnumeric

real

small int

小數, number 的子型別

高精度實數

整數, number 的子型別

整數, number 的子型別

與number等價

與number等價

整數, 比 integer 小

long

變長字串

0->2147483647

32,767位元組

date

日期型西元前2023年1月1日至公元後2023年12月31日

boolean

布林型true, false,null

不使用rowid

存放資料庫行號

urowid

通用行識別符號,字元型別

2.%type變數

在宣告變數時,除了可以使用oracle規定的資料型別外,還可以使用%type關鍵字定義乙個變數。其資料型別與已經定義的某個資料變數(尤其是表的某一列)的資料型別相一致。

使用%type特性的優點在於:

l         所引用的資料庫列的資料型別可以不必知道;

l         所引用的資料庫列的資料型別可以實時改變,容易保持一致,也不用修改pl/sql程式。

%type變數定義的格式如下:

declare

var_name tablename.columnname%type;

例子:

declare

v_name emp.ename%type;

v_sal emp.sal%type;

v_date emp.hiredate%type;

begin

select ename, sal, hiredate

into v_name,v_sal,v_date

from emp

where empno='7369';

dbms_output.put_line(v_name||'---'||v_sal||'--'||v_date);

end;

3.復合變數

3.1自定義記錄型別

記錄型別類似於c語言中的結構資料型別,它把邏輯相關的、分離的、基本資料型別的變數組成乙個整體儲存起來,它必須包括至少乙個標量型或record 資料型別的成員,稱作pl/sql record 的域(field),其作用是存放互不相同但邏輯相關的資訊。在使用記錄資料型別變數時,需要先在宣告部分先定義記錄的組成、記錄的變數,然後在執行部分引用該記錄變數本身或其中的成員。

定義記錄型別語法格式如下:

type record_name is record(

v1 data_type1 [not null] [:= default_value ],

v2 data_type2 [not null] [:= default_value ],

......

vn data_typen [not null] [:= default_value ] );

例子1:

declare 

type test_rec is record(

name varchar2(30) not null := '胡勇',

info varchar2(100));

rec_book test_rec;

begin

rec_book.name :='胡勇';

rec_book.info :='談pl/sql程式設計;';

dbms_output.put_line(rec_book.name||' ' ||rec_book.info);

end;

例子2:

declare

--定義與hr.employees表中的這幾個列相同的記錄資料型別

type record_type_employees is record(

f_name hr.employees.first_name%type,

h_date hr.employees.hire_date%type,

j_id hr.employees.job_id%type);

--宣告乙個該記錄資料型別的記錄變數

v_emp_record record_type_employees;

begin

select first_name, hire_date, job_id into v_emp_record

from employees

where employee_id = &emp_id;

dbms_output.put_line('雇員名稱:'||v_emp_record.f_name

||' 僱傭日期:'||v_emp_record.h_date

||' 崗位:'||v_emp_record.j_id);

end;

注:

1.可以用 select語句對記錄變數進行賦值,只要保證記錄欄位與查詢結果列表中的字段相配即可。

2.乙個記錄型別的變數只能儲存從資料庫中查詢出的一行記錄,若查詢出了多行記錄,就會出現錯誤。

3.2 %rowtype型別

pl/sql 提供%rowtype操作符, 返回乙個記錄型別, 其資料型別和資料庫表的資料結構相一致。

使用%rowtype特性的優點在於:

l         所引用的資料庫中列的個數和資料型別可以不必知道;

l         所引用的資料庫中列的個數和資料型別可以實時改變,容易保持一致,也不用修改pl/sql程式。

例子:

declare

v_empno emp.empno%type :=&no;

rec emp%rowtype;--rec就是對應於emp表的%rowtype型別

begin

select * into rec from emp where empno=v_empno;

end;

3.3lob型別

oracle提供了lob (large object)型別,用於儲存大的資料物件的型別。oracle目前主要支援bfile, blob, clob 及 nclob 型別。

bfile (movie)

存放大的二進位制資料物件,這些資料檔案不放在資料庫裡,而是放在作業系統的某個目錄裡,資料庫的表裡只存放檔案的目錄。

blob(photo)

儲存大的二進位制資料型別。變數儲存大的二進位制物件的位置。大二進位制物件的大小<=4gb。

clob(book)

儲存大的字元資料型別。每個變數儲存大字元物件的位置,該位置指到大字元資料塊。大字元物件的大小<=4gb。

nclob

儲存大的nchar字元資料型別。每個變數儲存大字元物件的位置,該位置指到大字元資料塊。大字元物件的大小<=4gb。

全文參考自: 

PL SQL資料型別

create or replace procedure pr mytest is v test number 8 變數 v char varchar2 10 c changl constant number 12,3 3.14 常量 v bm t hq ryxx.bumbm type type ty...

變數與資料型別

u 標量型 l 數字型,字元型,布林型,日期型 u 組合型 l record,table,varray u 參考型 l ref cursor,ref object type u lob large object lbfile bfile資料儲存在乙個不被oralce維護的單獨檔案中,該資料庫儲存乙個...

變數與資料型別

1.變數 定義 可以改變的量稱為變數,實際代表記憶體的一塊空間 命名規則 1 包含數字字母下劃線,且首字元不能位數字 2 嚴格區分大小寫,且不能使用關鍵字 可使用import keyword print keyword.kwlist 查詢 3 命名變數有意義,且不能使用中文命名 變數的交換方法 py...