Oracle和MySql的分頁查詢區別和PL/SQL的基本概念


Oracle和MySql的分頁查詢區別:
 
  Oracle的分析查詢,之前Oracle的分頁是使用偽列 ROWNUM 結合子查詢實現,mysql的分頁更簡單,直接使用 LIMIT 關鍵字就可以實現了。
要實現分頁查詢需要知道兩個參數:
currentPage: 表示當前頁(cp)
lineSize:表示每頁顯示的數據量(ls)
oracle的分頁示例:
顯示第一頁,每頁顯示三條數據
SELECT *
  FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
  FROM emp
  WHERE ROWNUM<=3) temp
  WHERE temp.rn>=1;
顯示第二頁,每頁顯示三條數據
SELECT *
  FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
  FROM emp
  WHERE ROWNUM<=6) temp
  WHERE temp.rn>=4;

顯示第三頁,每頁顯示三條數據

SELECT *
  FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
  FROM emp
  WHERE ROWNUM<=9) temp
  WHERE temp.rn>=7;

通過以上三個例子我們可以總結出知道了當前頁(cp)和每頁顯示的數據量(ls),就可以計算出要從數據庫中第m條查詢到第n條數據的公式:

m=(currentPage-1) * lineSize+1

n=currentPage * linesSize

//***************************************分割線**********************************************//
mysql的分頁查詢:
SELECT* FROM emp LIMIT m,ls
 
查詢第一頁,每頁顯示三條數據
SELECT * FROM emp LIMIT 0,3

 

查詢第二頁,每頁顯示三條數據
SELECT * FROM emp  LIMIT 3,3

 

查詢第三頁,每頁顯示三條數據
SELECT * FROM emp LIMIT 6,3

 

根據上面的結果可以總結出公式:已知當前頁 currentPage和每頁顯示的數據量 lineSize
  m = (currentPage - 1) * lineSize
  ls = lineSize

 

總結:
mysql 的分頁查詢是很容易實現,基本的語法
SELECT * FROM 數據表 LIMIT m,n
 
mysql 數據表中的數據索引是從0開始的。
通過上面的示例可以總結出公式:已知當前頁currentPage,和每頁顯示的數據量lineSize
startrow=(currentPage-1) * lineSize
ls=lineSize
//************************************************分割線**********************************************************//
PL/SQL的基本概念
  PL/SQL也是一種程序語言,叫做過程化SQL語言(Procedural Language/SQL)。 使用PL/SQL語句塊中的SQL語句更加高效,原因主要是這樣做可以大幅降低網絡流量,應用程序也會變得更加高效。
  PL/SQL是Oracle數據庫對SQL語句的擴展,在普通SQL語句的使用上增加了編程語言的特點,所以PL/SQL把數據操作和查詢語句組織在PL/SQL代碼的過程性單元中,通過邏輯判斷、循環等操作實現復雜的功能或者計算,PL/SQL只有Oracle數據庫有。

優化性能:

  PL/SQL以整個語句塊發送給服務器,這個過程在單次調用中完成,降低了網絡擁擠。而如果不使PL/SQL,每條SQL語句都有單獨的傳輸交互,在網絡環境下占用大量的服務器時間,同時導致網絡擁擠。

可重用性:

PL/SQL能運行在任何ORACLE環境中(不論它的操作系統和平台),在其他ORACLE能夠運行的操作系統上無需修改代碼。

模塊化:

  每個PL/SQL單元可以包含一個或多個程序塊,程序中的每一塊都實現一個邏輯操作,從而把不同的任務進行分割,由不同的塊來實現,塊之間可以是獨立的或是嵌套的。

示例:第一個pl/sql程序
BEGIN --表示開始過程
  NUULL; --過程代碼
END; --過程結束
/

輸出 ‘hello world’

--開啟打印功能

SET SERVEROUTPUT ON;

BEGIN --表示開始過程

DBMS_OUTPUT.put_line('hello world'); --過程代碼

END; --過程結束

/

定義變量

DECLARE

v_num NUMBER; --聲明一個全局變量

BEGIN --表示過程開始

DBMS_OUTPUT.put_('變量的值是:'|| v_num); --過程代碼

END; --過程結束

/

字符串的連接使用的不是‘+’而是‘||’

全局變量的聲明放在DECLARE關鍵字之后

如果聲明了變量但是沒有賦值則默認是空

為變量賦值:

DECLARE

v_num NUMBER; --定義了變量

BEGIN --表示過程開始

v_num:=30; --為變量賦值

DBMS_OUTPUT.put_('變量的值是:'|| v_num); --過程代碼
END;  --過程結束
/

上面為變量賦值代碼可以在DECLARE后面聲明變量的時候給出默認值,如果在BEGIN 之后沒有為變量賦新的值,則按照默認值輸出。

下方是一個完整代碼示例:

根據雇員的編號查詢出雇員的名字,要求編號從鍵盤輸入。

DECLARE 
v_empno NUMBER; --保存雇員編號
v_ename VARCHAR2(100); --保存編號
BEGIN --表示開始過程
--在鍵盤輸入雇員編號
DBMS_OUTPUT.put_line('請輸入編號:');
v_empno:=&empno;
--開始查詢
SELECT ename INTO v_ename
FROM emp
WHERE empno=v_empno;
DBMS_OUTPUT.put_line('編號是:'||v_empno || ' 名字是:'||v_ename); --過程代碼
END; --過程結束
/

//*********************************************分割線***************************************************//

 
         

 

 
        
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM