oracle基礎 四 函式

2021-09-24 17:52:35 字數 3422 閱讀 3311

1.使用特定格式插入日期值

使用to_date函式

思考:如何插入列帶有日期的表,並按照年-月-日的格式插入?

insert into emp values (9998, 『小紅』, 『manager』,7782, 『1988-11-11』,78.9,55.33,10);

上面的日期寫入不對,正確的方式如下:

insert into emp values(9998,『小紅』,『manager』,7782,『11-11月-1988』,78.9,55.33,10);

或者使用 to_date函式:

insert into emp values(9998,『小紅2』,『manager』,7782,to_date(『1988-12-12』, 『yyyy-mm-dd』),78.9, 55.33, 10);

2.用子查詢更新和插入資料

update emp set (job,sal,comm)=(select job,sal,comm from emp where ename=『smith』) where

ename=『scott』;

3.提交事物

當執行使用commit語句可以提交事務。當執行了commit語句之後,會確認事務的變化,結束事務,刪除儲存點,釋放鎖,當使用commit語句結束事務之後,其它會話將可以檢視到事務變化後的跟新資料

4.唯讀事務

唯讀事務是指允許執行查詢的操作,而不允許執行任何其它dml操作的事務,使用唯讀事務可以確保使用者只能取得某時間點的資料。假定機票代售點每天18點開始統計今天的銷售情況,這時可以使用唯讀事務。在設定了唯讀事務後,但是唯讀事務將不會取得最新資料的變化,從而可以保證取得特定時間點的資料資訊

設定唯讀事務:

set transaction read only

5.字元函式

lower(char): 將字串轉化為小寫的格式

upper(char): 將字串轉化為大寫的格式

length(char): 返回字串的長度

substr(char, m, n): 取字串的子串

replace(char1, search_string, replace_string)

instr(char1, char2, [,n[,m]]) 取子串在字串的位置

6.數學函式

round(n, [m])

該函式用於執行四捨五入,如果省掉m,則四捨五入到整數; 如果m是正數,則四捨五入到小數點m位後。如果m是負數,則四捨五入到小數點的m位前

trunc(n,[m])

該函式用於擷取數字。如果省掉m,就截去小數部分,如果m是正數就擷取到小數點的m位後,如果m是負數,則擷取到小數的前m位

mod(m,n)

floor(n) 返回小於或等於n的最大整數

ceil(n) 返回大於或是等於n的最小整數

abs(n) 返回數字n的絕對值

exp(n) 返回e的n次冪

log(m,n) 返回對數值

7.日期函式

日期函式用於處理date型別的資料

預設情況下日期格式是 dd-mon-yy 即12-7月-78

(1) sysdate: 該函式返回系統時間

(2) add_months(d,n)

(3) last_day(d): 返回指定日期所在月份的最後一天

8.獲取當前時間

select sysdate from dual;

select * from emp where sysdate>add_months(hiredate, 8); //八個月前

select hiredate,ename from emp where last_day(hiredate)-2=hiredate;

9.轉換函式

轉換函式用於將資料型別從一種轉為另外一種,在某些情況下,oracle server允許值的資料型別和實際的不一樣,這時oracle server會隱含的轉化資料型別

比如:create table t1(id int);

insert into t1 values(『10』) —>這樣oracle會自動的將』10』 ---->10

create  table  t2 (  id  varchar2(10)  );

insert into t2 values(1); -->這樣oracle就會自動將1---> '1';

我們要說的是儘管oracle可以進行隱含的資料型別的轉換,但是它並不適用所有的情況,為了提高程式的可靠性,我們應該適用轉換函式進行轉換

to_char

你可以使用select ename,hiredate,sal from emp where deptno=10;

yy: 兩位數字的年份 2004—> 04

yyyy:四位數字的年份 2023年

mm: 兩位數字的月份 8月—>08

dd: 2位數字的天 30號—>30

hh24: 8點 —> 20

hh12: 8點 —> 08

mi, ss ----> 顯示分鐘\秒

9:顯示數字,並忽略前面0

0:顯示數字,如位數不足,則用0補充

.: 在指定位置顯示小數點

,: 在指定位置顯示逗號

$: 在數字前加美元

l: 在數字前加本地貨幣符號

c: 在數字前加國際貨幣符號

g: 在指定的位置顯示組分隔符

d: 在指定位置顯示小數點符號(.)

顯示2023年入職的所有員工

select * from emp where to_char(hiredate, 'yyyy')=1980

顯示所有12月份入職的員工

select * from emp where to_char(hiredate, 'mm')=12;

select ename,to_char(hiredate, 'yyyy-mm-dd hh24:mi:ss') from emp;

11.to_date

函式to_date用於將字串轉成date型別的資料

12.系統函式

sys_context

1)terminal:當前會話客戶所對應的終端的識別符號

2)language: 語言

3)db_name: 當前資料庫名稱

4)nls_date_format: 當前會話客戶所對應的日期格式

5)session_user: 當前會話客戶所對應的資料庫使用者名稱

6)current_schema: 當前會話客戶所對應的預設方案名

7)host: 返回資料庫所在主機的名稱

查使用那個資料庫?

select sys_context('userenv', 'db_name') from dual;

oracle基礎總結(四)

顯式轉換 to char date,format 按照指定的格式format把數字或日期型別的資料轉換成字串 格式 必須包含在單引號中而且大小寫敏感。可以包含任意的有效的日期格式。日期之間用逗號隔開。日期格式如下 yyyy 2004 year two thousand and four mm 02m...

Oracle常識基礎 四

動態sql oracle中的動態sql可以通過本地動態sql命令執行,也可以通過dbms sql程式包來執行。語法 execute immediate 動態sql語句字串 using 繫結輸入引數變數 引數值 錯誤處理 預定義異常 pl sql支援的預定義異常 異常 說明 access into n...

函式基礎(四) 遞迴函式

學過數學的可能多多少少聽過 遞迴 這個詞 那麼遞迴函式到底是怎麼個函式呢?老樣子,從需求找方法!我想要 100 2 結果繼續除2,直到結果為零,然後列印每一步的結果 怎麼寫呢?可以用迴圈!對!要的就是這種結果!但是,總有艮的 就想用函式來解決這個問題 甚至更過分的!還不想用迴圈!能做嗎?於是就有大傻...