JAVA日志

          JAVA日志

           

          在Orcale中使用視圖和存儲(chǔ)過程

          ?在Orcale中使用視圖和存儲(chǔ)過程
          一.視圖
          1.為什么要引入視圖這個(gè)概念?
          試想如果我們要使用計(jì)算列調(diào)整數(shù)據(jù)的結(jié)構(gòu),或者基于列值比較從多個(gè)表中抽取數(shù)據(jù),我們就不得不采取相對(duì)很復(fù)雜的SQL語句.但是,如果我們要多次按照
          這種方式獲取數(shù)據(jù),那豈不是要一遍又一遍的重復(fù)寫這些復(fù)雜的SQL語句,那是一件多么令人頭痛的事啊,但是,有了視圖,我們就可以完全避免這些不必要
          多做這些無用功了,SQL允許我們?cè)跀?shù)據(jù)庫中創(chuàng)建視圖.視圖提供了一種半持久性的改造方式,這樣我們就可以通過訪問視圖來代替直接訪問表,換句話說就是
          視圖就相當(dāng)于一個(gè)抽象層,這樣就能是我們以一種更一致的方式格式數(shù)據(jù).同時(shí)這樣也大大提高了數(shù)據(jù)的安全性,用戶僅可以訪問到視圖,而不能訪問到下層的
          數(shù)據(jù).
          2.視圖有那些優(yōu)點(diǎn)?
          ?1.將用戶的注意力集中在特定的數(shù)據(jù)上,從而提高數(shù)據(jù)的安全性
          ?2.簡化了數(shù)據(jù)的查詢和處理操作,DBA可以把大量的相關(guān)的內(nèi)容設(shè)計(jì)到一個(gè)視圖中,使用戶在查詢和處理數(shù)據(jù)時(shí)就像處理表那么簡單,而不用編寫復(fù)雜的
          ?select語句
          ?3.有利于數(shù)據(jù)的交換
          ?4.有利于簡化對(duì)用戶權(quán)限的管理
          3.在SQL如何創(chuàng)建和使用視圖?
          ?創(chuàng)建視圖:
          ?->create view 視圖名稱 as Query(任意的select語句)
          ??Example:CREATE VIEW selectstudent
          ????AS select name from student;(該例子就提高了數(shù)據(jù)的按全性,在用戶調(diào)用這個(gè)視圖時(shí),就只能看到學(xué)生名字)
          ?使用視圖:
          ?->select 字段名 from 視圖名 where 過濾條件
          ??Example(接上):select name from selectstudent where name = '張三';
          4.怎樣更改視圖?
          ?->CREATE OR REPLACE VIEW 視圖名 AS Query
          5.怎樣刪除視圖?
          ?->DROP VIEW 視圖名
          二.存儲(chǔ)過程
          1.什么是儲(chǔ)存過程?
          我們?cè)谑褂肧QL進(jìn)行編程時(shí),可以使用兩種方法儲(chǔ)存和執(zhí)行程序.可以在本地儲(chǔ)存程序,創(chuàng)建并向數(shù)據(jù)庫發(fā)送命令并處理結(jié)果的應(yīng)用程序,最好的方法當(dāng)然是將程序在數(shù)據(jù)庫儲(chǔ)存為
          儲(chǔ)存過程,創(chuàng)建執(zhí)行儲(chǔ)存過程并處理結(jié)果的應(yīng)用程序.
          2.存儲(chǔ)過程有什么作用?
          ?->接受輸入?yún)?shù)并以輸出參數(shù)的形式將多個(gè)值返回至調(diào)用過程或進(jìn)行批處理
          ?->執(zhí)行數(shù)據(jù)庫操作的編程語句
          ?->向調(diào)用過程或批處理返回狀態(tài)值表明成功或失敗以及失敗的原因
          3.使用存儲(chǔ)過程有那些優(yōu)勢(shì)?
          ?->允許模塊化程序設(shè)計(jì).只需創(chuàng)建過程一次并將其保存在數(shù)據(jù)庫中,以后就能在程序中調(diào)用該過程任意次
          ?->允許更快的執(zhí)行.如果某項(xiàng)操作需要大量的SQL代碼或需要重復(fù)執(zhí)行,存儲(chǔ)過程將比SQL代碼執(zhí)行的要快
          ?->減少網(wǎng)絡(luò)流量.一個(gè)需要數(shù)百行的SQL代碼操作由一條執(zhí)行過程代碼的單獨(dú)語句就可以實(shí)現(xiàn),而不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼.
          ?->可作為安全機(jī)制使用
          4.如何創(chuàng)建存儲(chǔ)過程?
          ?->CREATE [OR REPLACE] 存儲(chǔ)過程名 (參數(shù)列表)
          ??AS
          ??BEGIN
          ???存儲(chǔ)過程主體
          ??END;
          ?->Orcale中參數(shù)的模式:參數(shù)名 IN 或 OUT 數(shù)據(jù)類型
          ??Example:
          ???create or replace insertstudent(i_studentid in int,i_studentname in vachar);
          ???as
          ???begin
          ????insert student(studentid,name)values(i_studentid,i_studentname);

          ???end;
          ???使用該存儲(chǔ)過程
          ???call insertstudent(1,'張三');
          ?->使用輸出參數(shù):
          ??Example:
          ???create or replace getstudentname(i_studentid in int,o_studentname out vachar);
          ???as
          ???begin
          ????select name into o_studentname from student where studentid = i_studentid;
          ???end;
          ??
          ???使用該存儲(chǔ)過程
          ???set severout on --單獨(dú)執(zhí)行
          ???declare
          ????studentname vachar(50);--變量聲明
          ???begin
          ????getstudentname(1,studentname);
          ????dbms_output.put_line(studentname);
          ???end;

          ???著輸出結(jié)果為:張三

          ???
          ???
          ?????

          ?

          posted on 2006-11-09 18:29 小木 閱讀(1352) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          相冊(cè)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 佳木斯市| 离岛区| 内丘县| 济源市| 绍兴县| 榆社县| 叙永县| 五家渠市| 曲阜市| 靖江市| 茶陵县| 乌拉特后旗| 垫江县| 台北县| 宜黄县| 高邮市| 临清市| 阜宁县| 亳州市| 突泉县| 康乐县| 天峨县| 翁牛特旗| 左云县| 游戏| 塔城市| 桓仁| 汤阴县| 铜山县| 克拉玛依市| 柏乡县| 大英县| 将乐县| 湄潭县| 招远市| 文山县| 精河县| 阿勒泰市| 玉山县| 绵阳市| 扶绥县|