數據類型:sql
Char和varchar2數據類型:數據庫
相同點:都是做爲字符類型數組
不一樣點:char是定長的varchar2是變長的函數
Char 最大爲2000字節 varchar2爲32767spa
注意: 若是定義char類型爲char(10),可是隻傳入了7位數據,剩下的則會用空格補全。對象
*若是出現直等狀況,可能形成數據關聯失敗的狀況。建議使用varhcar2定義字符類型。事務
NUMBER類型:rem
Number(5,2) 表示共5位長,小數點前3位小數點後2位文檔
Number(4,-3)表示共4位長,-3 表示從後往前截取,判斷千分位是否進位,如:5680 number(4,-3) 結果爲6000字符串
LONG和LONG RAW:
LONG用於存儲變長的字符串,最大長度爲2GB ,因爲容量上的優點多用來存儲文本,字符數組以及各類文檔,可使用DML語句操做LONG列進行增刪改查等。可是不能再表達式,函數以及where和group by 等特定語句中引用LONG類型的數據。
LONG RAW 用於存儲原始的二進制變量數據,最大值爲2GB,這樣的數據須要Oracle的包來讀取並轉化爲二進制數據,而後存儲,並使用相反的方法來讀取,不能使用DML語句來直接查詢或者進行其餘操做。
BOOLEAN類型:
Boolean用於存儲true false null
True表示真值 false 表示價值 null 表示未知,而且sql沒有數據類型與boolean對應
可是Boolean的值能夠經過if或者case 語句完成轉化
CREATE OR REPLACE PROCEDURE boolean_type (b BOOLEAN)
IS
BEGIN
CASE
WHEN b IS NULL THEN
dbms_output.put_line('is null');
WHEN b THEN
dbms_output.put_line('is true');
WHEN NOT b THEN
dbms_output.put_line('is flase');
END;
PLS_INTEGER數據類型:
PLS_INTEGER類型和BINARY_INTEGE是相同的,給類型是帶符號的整數數據類型,有效範圍(-2147483648~2147483648),相比於NUMBER數據類型PLS_INTEGER直接使用硬件存儲和計算。可是使用PLS_INTEGER存在溢出問題解決辦法可使用INTEGER
SIMPLE_INTEGER是PLS_INTEGER的子類型,具備非空約束的優點,若是指定了NULL值,則系統會報錯,若是對整數數據類型須要非空約束,建議使用SIMPLE_INTEGER減小判斷,而且SIMPLE_INTEGER定義時必須賦初始值,由於非空。
DATE和TIMESTAMP:
日期類型,timestamp比date類型更加準確些。
DECLARE
date_type DATE;
timestamp_type TIMESTAMP;
BEGIN
SELECT SYSDATE INTO date_type FROM dual;
dbms_output.put_line('DATE類型--'||date_type);
SELECT SYSDATE INTO timestamp_type FROM dual;
dbms_output.put_line('TIMESTAMP類型--'||timestamp_type);
END;
結果:
DATE類型--22-1月 -17
TIMESTAMP類型--22-1月 -17 02.12.04.000000 下午
ARCHORED類型:
Archored類型基於底層的數據庫對象,定義以後會隨着底層數據庫的數據類型改變而改變,用戶沒必要修改程序就能夠適應底層數據類型的改變。
語法格式:變量名 對象類型屬性%TYPE;
如:var_name變量名 emp(對象名).name(屬性名)%TYPE;
自定義數據類型:
自定義數據類型分爲無約束和有約束。
無約束: subtype 子類型名稱 is 基類型
無約束自定義子類型與基類型有相同的取值範圍,實際上至關於基類型的別名
subtype mynumber is number;
var1 mynumber(3,2);
有約束的:
在無約束相同的語法中可使用精度,範圍,或者約束來定義用戶子類型
如:subtype mynumber is number(3,2)
若是使用此類型定義4000.22 則報錯!
PLSQL保留字:
DECLARE,BEGIN,END,EXCEPTION
變量:
聲明的變量能夠賦初始值,指定非空約束,也可使用默認值,或者定義爲常量,常量不會再變化而且在聲明時賦值。pai constant number := 3.14
變量的有效範圍,內部局部,和全局
如:DECLARE
vars VARCHAR2(10) := 'var_out';
BEGIN
DECLARE
vars VARCHAR2(10) := 'var_in';
BEGIN
dbms_output.put_line('in:='||vars);
END;
dbms_output.put_line('out:='||vars);
END;
結果:
in:=var_in out:=var_out
變量還可使用select first_name_type into first_name from emp
序列號:
Oracle使用序列生成器自動生成用戶能夠再事務中使用的惟一序列號,該序列號是一個整數類型,主要用於在多用戶下產生惟一的數字序列,可是不會形成額外的磁盤I/O或者事務鎖。理解爲數據庫的一個對象,該對象產生惟一序列,可以避免多用戶相互等待而形成的事務串執行,序列號的使用提升了系統的事務處理能力,減小了多用戶並行操做的等待時間。
建立一個序列:
Create sequence sequence_name start with 100 increment by 1;
建立一個序列sequence_name 從100開始每次自增1
當每次調用序列號的nextval 序列號都增長1;
事務:
Commit rollback savepoint
Commit提交
Rollback回滾
Savepoint 保存點
commit事務提交永久存儲,rollback 未提交回滾到原始
Savepoint 斷點
例:
事務1
Savepoint1
事務2
Savepoint2
事務3
Savepoint3
Rollback savepoint1
End; 執行結束,結果是回到savepoint1的事務結果。