以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...