oracle部分使用記錄

2021-09-19 14:12:06 字數 3868 閱讀 7066

(本文僅個人學習記錄使用,可能存在部分問題。資料庫為11g)

1、建立陣列型別

type array_type is varray (100) of varchar2(100);

2、多個字段約束限制

alter table table_nameadd constraint constraint_name

unique (column1, column2, ... , column_n);

3、迴圈跳出

第一種:使用return的時候,直接跳出儲存過程或者函式

第二種:使用exit的時候,跳出本迴圈轉而執行本迴圈的上一級迴圈的下一次迴圈。就此案例而言my_cu.spbh = 'aaa'為真的時候,直接跳出my迴圈轉而去執行my_cu的下一次迴圈

第三種:使用continue的時候,本次迴圈後面的**部分不再執行,轉而執行本迴圈的下一次迴圈。就此案例而言my_cu.spbh = 'aaa'為真的時候,後面的**不執行,繼續my的下一次迴圈

4、樹形查詢

select t.*, level 

from bm_relationship t

where level = 3

start with t.relationship_name = '人員與人員' 

connect by prior t.id = t.parent_id

order by t.id

5、重複資料的異常捕捉

exception

when dup_val_on_index then

continue;

when others then

continue;

6、select 表字段  into  插入欄位名  from 表名; 

exception

when no_data_found then

continue;

when others then

continue;

7、定義整張表名

別名    表名%rowtype;

引用時:別名.欄位名。

8、從一張表中隨機取資料

select * from (select * from a order by dbms_random.value)  where rownum <= 10

9、乙個資料在表中不存在

select 欄位名 from  表名 where 字段='資料') is null;

10、多表查詢:

表連線分類: 內連線、外連線、交叉連線、自連線

1、內連線: [inner] join    on

sql語法格式:

語法1:

select *

from 表1 [inner] join 表2 on 表1.欄位1=表2.欄位1;

語法2:

select *

from 表1,表2

where 表1.欄位1=表2.欄位1;

說明: 

內連線中的inner join 和 join 是等價的!但是建議為了程式的可讀性

盡量不要省略inner!

2、外連線:         

分類:左外連線、右外連線、全連線!

1)、左外連線:left outer join             

連線效果:

左側的表中的全部資料都會被顯示出來,但是右側表的資料,

只有和左側匹配上的字段才會被查詢出來!否則都會顯示null!

sql語法格式:             

語法1:

select *

from 表1 left outer join 表2

on 表1.欄位1=表2.欄位1;

語法2:

select *

from 表1 left outer join 表2

where 表1.欄位1=表2.欄位1(+);

2)、右外連線:right outer join           

連線效果:

右側的表中的全部資料都會被顯示出來,但是左側表的資料,

只有和右側匹配上的字段才會被查詢出來!否則都會顯示null!

sql語法格式:              

語法1:

select *

from 表1 right outer join 表2

on 表1.欄位1=表2.欄位1;

語法2:

select *

from 表1 left outer join 表2

where 表1.欄位1(+)=表2.欄位1;

3)、全外連線:full/all outer join 

sql語法格式:              

select *

from 表1 full outer join 表2

on 表1.欄位1=表2.欄位1;

3、自連線(self join)

自連線(self join)是sql語句中經常要用的連線方式,使用自連線可以將自身表的乙個映象當作另乙個表來對待,從而能夠得到一些特殊的資料。

4、交叉連線: 表與表之間做笛卡爾積查詢!

sql語法格式:(無條件查詢)

select *

from 表1 cross join 表2;

或者select *

from 表1, 表2;

11、查詢乙個表中某個字段每個值出現次數。

select max(a) from(select count(欄位1) a,max(欄位1) b from 表名 group by 欄位1 order by 欄位1);

12、生成隨機數,隨機字母,隨機字元

(1)dbms_random.string(opt, 字串長度)生成隨機字串

opt可取值如下:

'u','u' : 大寫字母

'l','l' : 小寫字母

'a','a' : 大、小寫字母

'x','x' : 數字、大寫字母

'p','p' : 可列印字元

(2)生成隨機數

1.隨機小數

dbms_random.value(low,high): --獲取乙個[low,high)之間的小數,包含low,不包含high

可以結合trunc函式獲取整數

例如:select dbms_random.value from dual; --生成0-1之間的小數

select dbms_random.value(0,100) from dual; --生成0-100之間的小數

select trunc(dbms_random.value(0,1000)) from dual; --生成0-1000之間的整數

select substr(cast(dbms_random.value(1,100000) as varchar2(10)),1,5) from dual; --生成5位數字

2.隨機整數

dbms_random.random; --獲取乙個[-2的31次方,2的31次方)之間的整數,包含-2的31次方,不包含2的31次方

(3)生成uuid

sys_guid();

13、兩張資料不一致無關聯字段資料隨機合併成

select a.欄位1,b.欄位2 from (select trunc(dbms_random.value(1,20)) rn,欄位1,欄位2 from(select 欄位1,欄位2 from 表1 order by dbms_random.value) where rownum <=50) a,(select rownum rn,欄位1,欄位2 from (select 欄位1,欄位2 from 表2 order by dbms_random.value)where rownum <=10) b where a.rn = b.rn

參考:

ORACLE部分函式記錄

格式一 instr string1,string2 instr 源字串,目標字串 select instr helloworld lo from dual 返回結果 4 即 在 lo 中,l 開始出現的位置 select instr helloworld l 4,2 from dual 返回結果 9...

oracle使用記錄

1.登入 第一種 sqlplus 使用者名稱 密碼 例項 as 角色 第二種 sqlplus 輸入使用者名稱和密碼 第三種 遠端dos登入 telnet使用前提 控制面板 程式 開啟或關閉windows功能 勾選telnet客戶端 telnet ip 埠 第四種 遠端登入 tnsnames配置資料庫...

oracle 使用記錄

向表中新增主鍵約束 alter table retail shop follow goods addconstraint pk retail shop follow goods primary key follow goods id 新增外來鍵 alter table retail shop fol...