Oracle課程小結

2021-09-08 15:47:33 字數 4922 閱讀 5195

1.dual

dual 是 oracle中的乙個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中

dual就是個一行一列的表,如果你往裡執行insert、delete、truncate操作,就會導致很多程式出問題

不要去執行drop dual的操作,否則會使系統不能用,資料庫起不了

dual是屬於sys schema的乙個表,然後以public synonym的方式供其他資料庫user使用

2.null

在oracle中,值null被看作乙個未知值,任何包含null值的算術運算都會得到結果null,。因此,下面的select語句返回null

select 5+7+null+9 from dual;

select null*9 from dual;

空字串:oracle 把空字串 ('') 當作 null, 因此 length('') 的值是null, 而不是 0。

乙個null值與任何其它值比較,包括null值,結果都是null,因此,對null的=、!=、>、<、>=、<=等操作的結果都是未知的,也就算說,這些操作的結果仍然是null。

由於null是未知,所以null and null、null or null、null and true和null or false的值都是未知的,這些的結果仍然是null。

但null and false和null or true不一樣

declare v_result boolean; v_result1 boolean;

begin

v_result:=null and false;

v_result1:=null or true;

dbms_output.put('v_result=');

dbms_output.put_line((case when v_result then 'true' else 'false' end));

---false

dbms_output.put('v_result1=');

dbms_output.put_line((case when v_result1 then 'true' else 'false' end));

---true

end;

3.函式

函式是一種有零個或多個引數並且有乙個返回值的程式。在sql中oracle內建了一系列函,也可自定義函式

數單行函式,多行函式(組函式)

lower(c)--小寫轉換

返回c小寫字元

concat(c1,c2) --連線字串

c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1、c2都為null,則返回null,如果c1,c2其中之一為數字,或都為數字

concat('10',10) concat(10,10)

substr( string, start_position, [ length ] )--取字串

引數1:string 要處理的字串

引數2:擷取字串的開始位置

引數3:擷取的字串的長度(而不是字串的結束位置) ,如果省略,則返回從start_position開始到string尾之間的字串

select substr('hello',2) from dual

instr(column|expression,'string',[m],[n])--查詢指定字元在字串中的位置

引數1:被搜尋的字串或者是表示式

引數2:要查詢的字元

引數3:從什麼位置開始查詢

引數4:這個字元出現的位置比如說:第一次出現的位置,第二次出現的位置。

如果此引數3為正,從左到右開始檢索,如果此引數為負,從右到左檢索

最後兩個引數是預設的是1和1

select instr('abc','d') from dual; -- 返回 0

select instr('syran mo','a',1,2) from dual; -- 返回 0

select instr('owo', 'w') from dual;--?

round( number, [ decimalplaces ] )--四捨五入函式

引數1:要處理的數值(數值表示式)

引數2:四捨五入時取的小數的位數,不填則返回整數

select round(123.456) from dual得到 123

select round(123.456, 0) from dual得到 123

select round(123.456, 1) from dual得到 123.5

select round(123.456, 2) from dual得到 123.46

select round(123.456, 3) from dual得到 123.456

select round(-123.456, 2) from dual得到 -123.46

mod(number,divisor) --返回乙個number除以divisor的餘數

引數1:為被除數。

引數2:為除數。如果 divisor 為零,函式 mod 返回值為原來number

mod(3, 2) 等於1

mod(3, 0) 等於3

mod(2,3) 等於2

to_char(date, 'format_model')--日期轉為字元

to_char(number, 'format_model')--數字轉為字元

格式化元素,用於顯示字元形式的數字值: "9"表示乙個數,"."列印乙個小數點","列印乙個千位指示

select to_char(12345.529,'999,999.99') from dual;-- 12,345.53

replace(text, search_string, replacement_string) --替換字串

從字串(text)查詢乙個文字表示式(search_string),如果找到,用指定的置換串(replacement_string)代替它

如果replacement_string為空,那麼所有的search_string都被移除。

如果search_string為null,那麼就返回原來的

select replace('hello','ello','i') from dual; --hi

to_number([, , ])

是將一些處理過的按一定格式編排過的字串變回數值型的格式

select to_number('20')*5 from dual;--100

to_date( string1, [ format_mask ], [ nls_language ] )--轉換為日期

format_mask 'yyyy-mm-dd hh24:mi:ss'

select to_date('1981-1-1','yyyy-mm-dd') from dual --1981-1-1

length(string)--返回字串的長度

select length('我') from dual --1

select length('ab') from dual -2

4.dbms_output

如果dbms_output.put_line的內容不能顯示,需要在命令列中先敲入set serveroutput on;

put和put_line

當使用過程put_line時,會自動在行的尾部追加行結束符;當使用過程put時,需要使用過程 new_line追加行結束符.

set serverout on

begin

dbms_output.put_line('偉大的中華民族');

dbms_output.put('中國');

dbms_output.put(',偉大的祖國');

dbms_output.new_line;

end;

/偉大的中華民族

中國,偉大的祖國

new_line

該過程用於在行的尾部追加行結束符.當使用過程put時,必須呼叫new_line過程來結束行.

5.pl/sql 塊

declare

/**定義部分(可選)——定義常量、變數、複雜資料型別、游標、例解

*/begin

/**執行部分(必須)——pl/sql語句和sql語句

*/exception

/**異常處理部分(可選)——處理執行錯誤

*/end; /*塊結束標記*/

命名塊:指具有特定名稱標識的pl/sql塊,在pl/sql塊前使用<<>>加以標記

<>begin

dbms_output.put_line('hello,world!');

<>begin

dbms_output.put_line('good');

end; --<>

end;--<>

賦值操作符「:=」

變數名:=值

定義變數

變數名資料型別

studscore number(5,2);

studname varchar(20);

定義常量

新增關鍵字 constant 並賦值

pi constant number(8,7):=3.1415926;

條件控制

有三種語句形式

if-then

if-then-else

if-then-elsif

if 《條件》 then

語句;end if;

if 《條件》 then

語句;else

語句;end if;

if 《條件1> then

語句;elsif 《條件2> then

語句;elsif 《條件3> then

語句;else

語句;end if;

case 《變數》

when 《值1> then

Oracle臨時表學習小結

最近因為工作的原因,需要使用到oracle的臨時表。發現oracle的臨時表和sql server的臨時表之間還是有很多的不同之處。為了能夠徹底弄清oracle臨時表的效能,也為了更好的在專案中決策是否使用臨時表,我花了一些時間翻閱了一下資料。下面對這段時間臨時表的學習做乙個總結。我們知道在資料庫中...

ORACLE知識點小結

基本概念 定義 網格計算資料庫 優化資源用量 優化pl sql 查詢技術的優化 自我調整功能 自我調整檢查點 sql語句轉換 大量資料的管理 全表掃瞄等 資料庫 是乙個資料集合,我們大多數情況下講的資料庫概念不僅是指物理資料,還指記憶體 程序物件的組合。oracle資料庫都將資料儲存在檔案中,在其內...

ORACLE課程設計報告

目錄 iii 第1章緒論 1 1.1 課題背景 1 1.2 課題的目的和意義 1 第2章可行性研究和需求分析 1 2.1 需求分析 1 2.1.1 廣告業務管理系統需要解決的問題 2 2.1.2 廣告業務管理系統業務流程圖 2 2.1.3資料流圖 3 2.1.4資料字典 5 2.2 可行性分析 6 ...