NVL( string1, replace_with) :如果string1為NULL,則NVL函數返回replace_with的值,否則返回string1的值,如果兩個參數都為NULL ,則返回NULL。
SIGN(n) :該函數用于檢測數字的正負.如果數字n小于0,則函數的返回值位-1;如果數字n的值等于0,則函數的返回值等于0,如果數字n大于0,則函數的返回值等于1。
CEIL(n) :該函數用于返回大于等于數字n的最小整數。
FLOOR(n):該函數用于返回小于等于數字n的最大整數。
MOD(m,n) :該函數用于返回兩個數字相除后的余數.如果數字n為0,則返回結果為m。
ROUND(n,[m]) :該函數用于執行四舍五入運算;如果省略m,則四舍五入至整數位;如果m是負數,則四舍五入到小數點前m位;如果m是整數,則四舍五入至小數點后m位。
TRUNC(n,[m]) :該函數用于截取數字。如果省略數字m,則將數字n的小數部分截去;如果數字m是正數,則將數字n截取到小數點后的第m位;如果數字m是負數,則將數字n截取到小數點前m位。
TRIM([ { { LEADING | TRAILING | BOTH },截取特定字符串。
ASCII(char):該函數用于返回字符串首字符的ASCII值。
CHR(char) :該函數用于將ASCII碼值轉變為字符。
CONCAT:該函數用于連接字符串,其作用于連接操作符(||)完全相同。
LENGTH(char):該函數用于返回字符串的長度,如果字符串的類型為CHAR,則其長度包括所有的后綴空格:如果char是null,則返回null。
ADD_MONTHS(d,n):該函數用于返回特定日期時間 d 之后(或之前)的n個月所對應的日期時間(n為正整數表示之后,n為負整數表示之前)。
TRUNC(d,[fmt]) :該函數用于截取日期時間數據.如果fmt指定年度,則結果為本年度的1月1日;如果fmt指定月,則結果為本月1日。
MOTNS_BETWEEN(d1,d2):該函數用于返回d1和d2之間相差的月數.如果d1小于d2,則返回負數;如果d1和d2的天數相同,或都是月底,則返回整數;否則Oracle以每月31天為準來計算結果的小數部分。
NEXT_DAY(d,char):該函數用于返回指定日期后的第一個工作日(由char指定)所對應的日期。
TO_CHAR(data[,fmt[,nls_param]]) :該函數用于將日期值轉變為字符串,其中fmt用于指定日期格式,nls_param用于指定nls參數。
TO_CHAR(n[,fmt[,nls_param]]):用于將數字值轉換為VARCHAR2數據類型。
TO_DATE(char[,fmt[,nls_param]]):該函數用于將符合指定日期的函數轉變為DATE類型的數值。
DECODE函數為Oracle專屬。
1)使用符號“||”
SELECT '工號為'||FNumber || '的員工姓名為' || FName FROM T_Employee WHERE FName IS NOT NULL?
2)使用CONCAT()函數進行拼接,Oracle中的concat函數僅支持兩個字符串進行拼接,如果要再多,可以嵌套使用。
SELECT CONCAT('工號:',FNumber) FROM T_Employee?
Oracle中使用rownum來進行分頁, 這個是效率最好的分頁方法,hibernate也是使用rownum來進行oralce分頁的
select * from ( select rownum r,a from tabName where rownum <= 20 ) where r > 10
字符類型:CHAR, VARCHAR2, NVARCHAR2
CHAR(12)表示包含12個字節的信息,CHAR字段最多可存儲2000字節信息,如果創建表時不指定CHAR長 度,則默認為1。Oracle一個漢字占3個字節,一個字母或數字占1個字節,CHAR(12)可存儲4個漢字。
VARCHAR2最多可存儲4000字節的信息,VARCHAR2(n)中的n表示的是字節
NVARCHAR2也是最多4000字節信息,NVARCHAR2(n)中的n表示的是字符長度。
數字類型:NUMBER、 INTEGER
NUMBER(P, S)中P表示的是有效數字的位數,最多不超過38,S表示小數的位數。
INTEGER是NUMBER的子類型,等于NUMBER(38, 0),用來存儲整數。
浮點數:BINARY_FLOAT類型、BINARY_DOUBLE類型
日期類型:DATE、TIMESTAMP
LOB類型:CLOB、BLOB、NCLOB
CLOB, 最大長度4G
BLOB, 存儲二進制文件,如圖像、聲音、視頻等,最大長度4G
NCLOB, 存儲UNICODE類型數據,最大長度4G
LONG, RAW, LONG RAW類型
LONG存儲變長字符串,最多2G字符數據
LONG RAW存儲2G二進制數據
RAW存儲二進制或字符類型數據
--轉換日期型:to_date(x,y) --y的長度要和x保持一致
eg: to_date(sysdate,'yyyy-mm-dd hh24:mi:ss')
--轉換字符型:to_char() --可以單獨去'yyyy''mm''dd'...
--轉換數字型:to_number()
delete from grade t2
where rowid != (select max(rowid)
from grade t
where t.name = '張三'
and t.subject = 'chinese')
and t2.name = '張三'
and t2.subject = 'chinese';
commit;
Truncate 和delete都可以將數據實體刪掉,truncate 的操作并不記錄到 rollback日志,所以操作速度較快,但同時這個數據不能恢復
Delete操作不騰出表空間的空間
Truncate 不能對視圖等進行刪除
Truncate是數據定義語言(DDL),而delete是數據操縱語言(DML)
tablespace --表空間對應用戶數據的存儲,在創建用戶時一般會指定表空間,如果沒,默認為users.存儲用戶的所有對象。
表空間包括:數據段segemnet --數據區extents --數據塊data block,一個數據文件只能存儲在一個表空間中。
function為函數,procedure為存儲過程。
1)函數是存儲過程的一種。
2)函數可以沒有參數,但是一定需要一個返回值,存儲過程可以沒有參數,不需要返回值
3)函數return返回值沒有返回參數模式,存儲過程通過out參數返回值, 如果需要返回多個參數則建議使用存儲過程
4)在sql數據操縱語句中只能調用函數而不能調用存儲過程。
declare
--聲明變量
變量 數據類型 := 初始值;
變量 數據類型 := &提示字段;--自定義輸入數據
變量 表名.列名%type := 初始值;--使用某表的列定義數據類型
變量 表名%type := 初始值;--將整個表的數據拿到自身,需要使用其中的數據類型時,表名.列名調用即可。
begin
select...--sql取數語句
into...--對應變量
dbms_output.put_line();--數據輸出格式
end;
declare
--聲明部分
begin
--邏輯/操作部分
select...
if 條件1 and/or 條件2 then
操作1;
elsif 條件3 and/OR 條件4 then
操作2;
...
else
其他操作;
end if;
end;
declare
--聲明部分
begin
--邏輯/操作部分
case
when 條件1 and/or 條件2 then
操作1;
when 條件3 and/OR 條件4 then
操作2;
...
else
其他操作;
end case;
end;
declare
--聲明部分
begin
--邏輯部分
loop
--循環體
if 退出循環的條件 then
exit;
end if;
--退出循環的簡寫
exit when 退出循環的條件;
end loop;
end;
declare
--聲明部分
begin
while 進入循環的條件 loop
--循環體
endloop;
end;
declare
--聲明部分
begin
--邏輯部分
for 循環變量 in 循環下限 .. 循環上限 loop
--循環體
endloop;
end;
--聲明顯示游標的語法結構
declare
--聲明部分
cursor 游標名 is
select查詢結果集;
begin
--使用顯示游標(其實就是 使用這個游標中的數據):結合循環,依次獲取到游標指向的結果集的每一行
for 循環變量 in 游標名 loop
--循環體
--在循環體內可以依次使用結果集的每一行數據,使用的方式就是:循環變量.游標指向的結果集的列名
end loop;
end;
--開發規范:游標名以 c_ 開頭
create [or replace] procedure 存儲過程名[(參數1 [參數類型] 數據類型[,參數2 [參數類型] 數據類型,...])]
is/* / as*/
--聲明/定義部分
begin
--操作/邏輯部分
end;
--開發規范:存儲過程名以 sp_ 開頭
CREATE OR REPLACE FUNCTION FUN_函數名(參數1 [IN|OUT|IN OUT] 數據類型,參數2 [IN|OUT|IN OUT] 數據類型……)
RETURN 返回結果的數據類型
IS /*|AS*/
BEGIN
自定義函數的的計算邏輯。
RETURN 計算結果 ; -- 函數的執行體中一定要包含 返回值
END ;