日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库之Oracle(二)

發布時間:2024/10/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库之Oracle(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

上文中對于oracle數據庫做了一些介紹,本文中將主要著重介紹在數據庫開發中運用到的知識,比如字符串的格式轉換,還有存儲過程的書寫,高級連接等

一:存儲過程

    存儲過程是為了更加方便,有效的去執行復雜的sql語句。

    存儲過程的格式:

    示例:輸出hello world

    Create or replace procedure? name Is????????       --->創建存儲過程,存在就替換

    begin ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --->開始執行

    Execute immediate ??????????? ???            ? --->立即執行(對表做操作時必須要有這條語句)

    DBMS_output.put_line(‘Hello? World’);?????????????????   --->輸出‘hello world’

    End; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--->結尾

    目前我在工作中用存儲過程的主要作用是為了存放 創表還有查詢,添加數據語句

    存在存儲過程和java 代碼一樣,我們習慣于去創建一個package包保存,創建包

    示例:

    Create or replace package Packagename As

    Begin

?     Class :=’二年級’; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --->公共變量(可以在下面的存儲過程中使用)

?     School:=’中南小學’;???????????????????????????????????????? --->公共變量

?     Procedure name1;???????????????????????????????????????? --->Package Body中的存儲過程 name1

?     Procedure name2;???????????????????????????????????????? --->Package Body中的存儲過程 name2

    End Packagename ;

?

    上問中的包內有兩個存儲過程,這兩個存儲過程實際是存放在包底下的body里面,創建好包以后,需要創建它的Body

    示例:

    Create or replace Package Body bodyname AS????????????????????????? --->創建body

    Begin ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--->開始

    Create or replace Procedure name1 as ???????????????????????????????????? --->存放存儲過程

    Begin

    Create table table1 (name? varchar2(20),age?? number);

    End name1 ;

    Procedure name2 ..........

    End bodyname; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?---->body 結束

?

二:在上篇中介紹了函數,那么實際開發中對于數據的處理,往往需要多個函數一起使用

示例:

Sql語句

顯示+10000/-10000

To_char(nvl(num,0),’$09999’)

需要將數字輸出

lpad(nvl(user_id,0),12,0) 這里需要使用從左補充0,否則取值會有問題

對于日期格式的取值

Nvl2(date,To_char(date,’yyyymmdd’),’19931111’) 利用nvl2函數去判斷非空

未完待續......

?

    當我們在對數據做處理的時候,需要從各個不同的表中取到相應的數據,這時候就有了高級連接。

三:高級連接

    開發中往往需要從不止一張表中獲取數據,那么都有哪些方法可以獲取到這些數據呢?

    下面讓我來一一為大家介紹,數據庫中各種表之間的聯系。

    表與表之間的連接通常分為內聯和外聯還有全聯。

?

  內聯:inner join on

示例:

會顯示bugrecord和bug表中bug_name相等的數據所有信息

Sql語句

select * from bugrecord inner join bug onbug.BUG_NAME=bugrecord.bug_name

?

  外聯(左聯和右聯)

    在多表進行連接時,我們會有主表和從表的區別。

      左連接? Left join on

示例:

會將左邊主表(bugrecord)中的數據全部顯示,右邊從表(bug)的數據只有和主表bug_name匹配的才會顯示

Sql語句

select * from bugrecord left join bug on bug.BUG_NAME=bugrecord.bug_name?

      右連接? Right join on

示例:

會將右邊主表(bug)中的數據全部顯示,左邊從表(bugrecord)的數據只有和主表bug_name匹配的才會顯示

Sql語句

select * from bugrecord right join bug on bug.BUG_NAME=bugrecord.bug_name?

?

  Union 與Union ALL的區別

    Union ALL

示例:

Union ALL 使用時,表中的數據結構必須相同,會將關聯表中所有的信息都顯示出來

Sql語句

select * from bugrecord union all select * from project?

    Union

示例:

Union 使用時,表中的數據結構必須相同,會將關聯表中所有的信息都顯示出來,會自動去掉重復的信息

Sql語句

select * from bugrecord union select * from project?

?

    在開發中如果遇到A表中的一個字段需要在B表中去對照獲取最終值,這種情況推薦使用臨時表來處理,使用臨時表的效率更加高效,在數據量大的情況下效率很重要。

    With? t_lise as lise

    (select a.bugId as t_id,

?     B.tranformvalue? as t_value

     From (select bugId from A)? a left join B b on a.bugid=b.codevalue

    )

     Select p.describe ||list.t_value??from project p?Left join lise on lise.t_id=p.bugId

  這種寫法很很大程度上會優化sql的效率,使用起來十分的便利。今后將會有一段時間從事oracle數據庫的開發工作,后續會補充在工作中遇到的難點,以及各種優化的語句,也期望大家可以在下面留言,有更好的優化或者本文提到的不對的地方一一指出。

    始終堅信------但行好事,莫問前程!

轉載于:https://www.cnblogs.com/warnerY/p/6809730.html

總結

以上是生活随笔為你收集整理的数据库之Oracle(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。