oracle 學習筆記(五)

來源:互聯網
上載者:User

     由於在學習oracle,總會不有自主的將它與微軟的Sql Server相比較,有時候會把自己弄糊塗,就下定決心把這個兩個主流資料庫的預存程序總結一下。說道預存程序,那麼預存程序有什麼優勢呢,相對於在應用程式執行sql語句。

  吸收前人的經驗總結下它的優點,主要有四點。 

  ★允許模組化程式設計,以後可以重複調用;可以由專人來完成,並可獨立於程式原始碼而單獨修改。這樣一個項目在需求分析、介面設計以及資料庫設計完了以後,就可以開始寫預存程序了,同一時間資料訪問層也可以開始寫了。沒有必要等詳細設計說明完成了在編碼的時候才開始寫SQL語句。

  ★執行更快,預存程序都是先行編譯命令,執行起來比SQL語句更快。

  ★減少網路流量。

  ★可作為安全機制,能夠屏蔽資料庫,使用者並不知道資料庫的真實結構。

  分頁預存程序是最好來說明這個過程的,下面是oracle的語句。

create  procedure fenye
(tableName in varchar2, --定義分頁的表名
Pagesize in number, --定義每頁的大小
pageNow in number, --定義當前第幾頁
myrows out number,
myPageCount out number, --定義輸出這個表一共有幾頁
p_cursor out testpackage.test_cursor) is
v_sql varchar2(1000);
v_begin number:=(pageNow-1)*Pagesize+1; --定義某頁開始選第幾行
v_end number:=pageNow*Pagesize; --定義某頁結束第幾行
begin
v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tableName
||') t1 where rownum<='||v_end||') where rn>='||v_begin;
open p_cursor for v_sql;
v_sql:='select count(*) from '|| tableName;
execute immediate v_sql into myrows;
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
dbms_output.put_line(myPageCount);
else
myPageCount:=myrows/pagesize+1;
end if;
--close p_cursor;
end;

下面是微軟資料庫的分頁預存程序

create procedure usp_Pagin
@pageSize int,
@pageIndex int,
@pageCount int output
as
declare @count int
select * from
(select row_number() over(order by sId)as num,* from student) as newTable
where num between (@pageSize*(@pageIndex-1)+1) and (@pageSize*@pageIndex)
select @count=count(*) from student
set @pageCount=ceiling(@count/convert(float,@pageSize))

從結構文法來說

      微軟                                                                                           oracle

定義參數  create procedure 過程名 輸入的參數名1,... as             create procedure 過程名(輸入的參數名1.....) is

定義變數     declare @變數名 類型(declare @count int)             變數名 類型; //(v_sql varchar2(1000);)

變數賦值     =                                  :=

變數輸入輸出定義  變數名 類型 in/output                      變數名 in/out 類型

  到現在為止,就這麼多吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.