JAVA日志

          JAVA日志

           

          在Orcale中使用視圖和存儲過程

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

          ???著輸出結果為:張三

          ???
          ???
          ?????

          ?

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 嘉黎县| 磐石市| 临夏县| 大石桥市| 永登县| 阿拉善盟| 玛多县| 本溪| 土默特左旗| 眉山市| 南川市| 漯河市| 浦县| 启东市| 普兰店市| 藁城市| 蓝田县| 郑州市| 四平市| 潮安县| 镶黄旗| 自贡市| 泰兴市| 洛扎县| 亳州市| 板桥市| 休宁县| 彭山县| 博湖县| 静安区| 类乌齐县| 张北县| 辽阳市| 福鼎市| 渑池县| 孟津县| 绩溪县| 绥化市| 木兰县| 马边| 建水县|