Oracle 10G關(guān)于表操作常用語(yǔ)句詳解及隨想
來(lái)源:易賢網(wǎng) 閱讀:1182 次 日期:2014-08-25 10:41:46
溫馨提示:易賢網(wǎng)小編為您整理了“Oracle 10G關(guān)于表操作常用語(yǔ)句詳解及隨想”,方便廣大網(wǎng)友查閱!

最近利用業(yè)余時(shí)間一直在看Oracle 10g開(kāi)發(fā)這方面資料, 由于以前企業(yè)級(jí)項(xiàng)目對(duì)數(shù)據(jù)庫(kù)操作都是基于微軟的SQL2000與2005 版本偏多. 所以這段時(shí)間也是一個(gè)轉(zhuǎn)換過(guò)程.特意在網(wǎng)上訂購(gòu)一本Oracle Database 10G SQL Master SQL and PL/SQL 這本書(shū)重新完整的 系統(tǒng)的進(jìn)行梳理一遍.總體給我感覺(jué)是其實(shí)我就是在重新梳理結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language/SQL) SQL .雖然做了一遍重復(fù)性工作. 但體會(huì)也是不同的. 類(lèi)似這本書(shū)并沒(méi)有費(fèi)了我很大精力 但給我感覺(jué)它就是一條細(xì)線. 把我以前遺留的片段全部關(guān)聯(lián)起來(lái). 視野上更加趨于開(kāi)闊.我慢慢才體會(huì)到. 做程序開(kāi)發(fā)的工作其實(shí)可粗可細(xì). 我們常常感慨一個(gè)技術(shù)大牛所作的創(chuàng)造性思維(類(lèi)似Robert C.Martin關(guān)于敏捷實(shí)踐) 其實(shí)殊不知他們也是在逐漸積累過(guò)程中才有了創(chuàng)造. 就想一句話說(shuō)的沒(méi)有任何事情是憑空而來(lái).那么對(duì)于一個(gè)做技術(shù)出生的人一個(gè)完善的知識(shí)體系結(jié)構(gòu)是相當(dāng)重要的. 所以我更愿意傾向于一個(gè)科班出生的技術(shù)人員. 目前情況是社會(huì)上關(guān)于軟件開(kāi)發(fā)培訓(xùn)的快餐打亂了行業(yè)內(nèi)這種格局, 格局我們沒(méi)法控制. 無(wú)論這種格局亂還是沒(méi)亂但歸咎到底還是一個(gè)技術(shù)人員在實(shí)際工作自我完善自己知識(shí)體系這種能力和意識(shí). 對(duì)于他人的指導(dǎo)這種"外力的鞭子"抽的我們都有惰性. 自覺(jué)的意識(shí)才能真正力量. 這種并非一朝一夕的能夠成就的. 它是一個(gè)長(zhǎng)時(shí)間 同時(shí)具有一定量積累才能沉淀出來(lái)的. 只有不斷完善自己知識(shí)體系 不斷學(xué)習(xí).才是一個(gè)真正技術(shù)人員發(fā)展上要走長(zhǎng)遠(yuǎn)子路. 這也是我考察一個(gè)技術(shù)人員非常重要的標(biāo)準(zhǔn).

這也是很多經(jīng)歷了入門(mén)級(jí)別痛苦后程序員 最為迷茫一個(gè)問(wèn)題. 以上最近這本書(shū)給我一點(diǎn)聯(lián)想. 轉(zhuǎn)入正題

Oracle Database 10G SQL Master SQL and PL/SQL :書(shū)樣 隨便推薦給各位. 內(nèi)容雖然很簡(jiǎn)單 但給我感覺(jué)細(xì)節(jié)上講的很全面 完全可以做為一個(gè)日常工作中查詢手冊(cè)也是沒(méi)有問(wèn)題的.一方面它詳細(xì)而通用講述了SQL標(biāo)準(zhǔn)每個(gè)細(xì)節(jié). 同時(shí)也有兩章是Oracle公司自己擴(kuò)展語(yǔ)法詳細(xì)講解.直接形成比對(duì).及時(shí)將來(lái)遇到與SQL標(biāo)準(zhǔn)不同變更. 一眼就能看出來(lái).

(A)SQL標(biāo)準(zhǔn)與三層.

又重新翻看這個(gè)結(jié)構(gòu)化查詢語(yǔ)言(簡(jiǎn)稱SQL)的"來(lái)世于前生"后.期間不經(jīng)讓我聯(lián)想到到以前項(xiàng)目中對(duì)于底層數(shù)據(jù)訪問(wèn)層三層架構(gòu)思想 他們之間聯(lián)系. 先來(lái)看看SQL標(biāo)準(zhǔn)來(lái)歷:

1970年時(shí)有E.F.Cold博士提出關(guān)系型數(shù)據(jù)庫(kù)這個(gè)概率. 聽(tīng)起來(lái)早就不新鮮了.但是SQL就是在E.F.Cold博士工作基礎(chǔ)自上發(fā)展而來(lái). 其第一個(gè)實(shí)現(xiàn)就是有IBM在20世紀(jì)70年代中期開(kāi)發(fā)的.當(dāng)時(shí)IBM開(kāi)展了一個(gè)成為System R的研究項(xiàng)目.SQL 就是從這項(xiàng)目中誕生的. 到了1979年底.一家當(dāng)時(shí)成為Relational Software INc.的公司(其實(shí)大家應(yīng)該都知道就是現(xiàn)在Oracle公司)發(fā)布了第一個(gè)商業(yè)版本的SQL. 隨著發(fā)展SQL已經(jīng)被完全標(biāo)準(zhǔn)化了.而且獲得美國(guó)國(guó)家標(biāo)準(zhǔn)組織(American Standards Institute ANSI)認(rèn)證.SQL可以用來(lái)訪問(wèn)Oracle. SQL Server ,DB2.和MySQL 數(shù)據(jù)庫(kù).直至發(fā)展到現(xiàn)在.

SQL在發(fā)展的實(shí)現(xiàn)標(biāo)準(zhǔn)化.也為三層分工實(shí)現(xiàn)編碼與數(shù)據(jù)庫(kù)依賴關(guān)系解耦. 編程語(yǔ)言不在依賴數(shù)據(jù)庫(kù). 主要?dú)w功于SQL訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)化. 目前架設(shè)一下主流的數(shù)據(jù)Oracle. SqlServer DB2.MySQL每個(gè)都有自己一套數(shù)據(jù)庫(kù)訪問(wèn)方式規(guī)則. 那是多么可怕一件事.當(dāng)切換一個(gè)數(shù)據(jù)庫(kù) 我們就徹底扔掉了一個(gè)數(shù)據(jù)訪問(wèn)層. 那么編碼應(yīng)用程序就死死綁定數(shù)據(jù)庫(kù)上.而從嚴(yán)格三層定義來(lái)說(shuō). 拿掉任何一層都是可以重用. 顯示層. 業(yè)務(wù)邏輯層 與數(shù)據(jù)訪問(wèn)層是沒(méi)有任何實(shí)際依賴的 層于層之間實(shí)現(xiàn)時(shí)一種獨(dú)立關(guān)系. 如果沒(méi)有SQL語(yǔ)言標(biāo)準(zhǔn)化.也就沒(méi)有實(shí)際意義上三層分工實(shí)現(xiàn). 現(xiàn)在項(xiàng)目中如果實(shí)現(xiàn)底層數(shù)據(jù)庫(kù)切換可以做一個(gè)簡(jiǎn)單工廠模式 只需在修改簡(jiǎn)單配置. 代價(jià)極小. 如果沒(méi)有SQL. 這一切就無(wú)從談起了.

(B)附Oracle 10G中關(guān)于表操作

附Oracle 10G下編碼: 內(nèi)有詳細(xì)說(shuō)明..其中操作非常簡(jiǎn)單 不做贅述 對(duì)于其他一些關(guān)于Oracle 10G特有屬性將在后續(xù).后有詳細(xì)說(shuō)明.

代碼

1 ----------------------創(chuàng)建數(shù)據(jù)庫(kù)表成功-----------------------------

2 --------插入數(shù)據(jù)操作詳細(xì)SQL記錄--

3 --------Author:chenkai Date:2010年2月21日15:50:58--

4 --oracle中顯示日期格式為:DD-MON-YY dd是代表日 mon是月份前三個(gè)字母大寫(xiě).yy 年份最后兩位實(shí)際上存儲(chǔ)年是4位 顯示的為2位

5

6 select * from customers

7

8 insert into customers(customer_id,first_name,last_name,phone)

9 values(1,'chenkai','ge','15895426521');

10

11 insert into customers(customer_id,first_name,last_name,phone)

12 values(2,'marik','陳凱','13854642541');

13

14 update customers set first_name='chenkaiunion' where customer_id=1

15

16 delete from customers where customer_id=2

17

18 --如果誤刪除了數(shù)據(jù)庫(kù)記錄 可以回滾數(shù)據(jù)

19 rollback;

20

21 insert into customers(customer_id, first_name, last_name,phone)

22 values(4,'再次插入數(shù)據(jù)','- Again','13654215875')

23

24 --插入數(shù)據(jù)進(jìn)行單引號(hào)和雙引號(hào)

25 insert into customers(customer_id, first_name,last_name)

26 values( 5,'測(cè)試單引號(hào)','Bei''Jing-單引成功了')

27

28

29 insert into customers(customer_id, first_name,last_name)

30 values( 6,'測(cè)試雙引號(hào)','The "Great Wall LED"')

31

32 select * from customers

33

34 --從一個(gè)表向另一個(gè)表復(fù)制行 (快速的植入數(shù)據(jù)注意修改了主鍵為10) 能用select union 測(cè)試不成功 可以使用 9i新增的merge語(yǔ)句來(lái)快速轉(zhuǎn)移

35 insert into customers(customer_id,first_name,last_name)

36 select 10,first_name,last_name from customers where customer_id=4

37

38 --使用merger來(lái)合并行數(shù)據(jù) Oracle 9i版本引入了Merge關(guān)鍵之來(lái)合并數(shù)據(jù)

39 --可以用來(lái)將一個(gè)表的行合并到另一個(gè)表中(如果在轉(zhuǎn)換中需要處理等等 在合并數(shù)據(jù))

40 create table product_change

41 (

42 product_id integer constraint change_pk primary key,

43 product_typeid integer constraint product_type_fkid references product_type(product_id),

44 name varchar2(130) not null,

45 description varchar(130),

46 price number(5,2)

47 );

48

49 --需求是這樣:對(duì)于Product 和product_change兩個(gè)表中product_id相同的行,將Product中各列里值修改成Product_change對(duì)應(yīng)的值. 如果product_id存在

50 --并匹配 進(jìn)行更新修改 如果不存在則在Product表插入記錄數(shù)據(jù) 即可 使用merge來(lái)操作

51 merge into products pro

52 using product_change pc on(

53 pro.product_id=pc.product_id

54 )

55 --當(dāng)匹配時(shí)修改

56 when matched then

57 update set

58 pro.product_typeid=pc.product_typeid,

59 pro.product_name=pc.name,

60 pro.product_content=pc.description,

61 pro.product_price=pc.price

62 --當(dāng)不匹配是 插入數(shù)據(jù)

63 when not matched then

64 insert(pro.productid,pro.product_typeid,pro.product_name,pro.product_content,pro.product_price)

65 values

66 (

67 pc.product_id,

68 pc.product_typeid,

69 pc.name,

70 pc.description,

71 pc.price

72 );

73 --操作完成

74 --merger into 子句指明了合并操作的目標(biāo)表(要合并到的表) 命名成一個(gè)別名 pro 下面都用這個(gè)來(lái)替代

75 --using -on子句指定了一個(gè)表連接 上面指定的Product表中Product——id和Product——change表中Product_id建立連接

76 --when matched then 當(dāng)一行數(shù)據(jù)滿足了Using...on條件時(shí)執(zhí)行操作 同理而言下面操作

77

78 --使用update語(yǔ)句修改行

79 --定義一個(gè)變量

80 variable average_product_prices number

81 update products set price=prices*0.75 returning avg(price) into:average_product_prices;

82

83

84 --使用默認(rèn)值 測(cè)試成功

85 create table userdefaultdemo

86 (

87 demo_id integer constraint demo_pk primary key,

88 datestatus varchar(200) default 'no placed it''s take' not null,

89 last_modifieddate date default sysdate not null

90 );

91

92 drop table userdefaultdemo

93

94 insert into userdefaultdemo(demo_id)

95 values(1)

96

97 --在更新或插入數(shù)據(jù)使用Default關(guān)鍵字來(lái)設(shè)置修改列的值

98

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
易賢網(wǎng)手機(jī)網(wǎng)站地址:Oracle 10G關(guān)于表操作常用語(yǔ)句詳解及隨想
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)