數據表使用的是orcale數據庫自帶的SCOTT用戶下的表,主要使用就是EMP(雇員表)和DEPT(部門表),表中有部分數據。
這個用戶默認是鎖定的,需要登錄有DBA權限的用戶對他進行解鎖,解鎖語句如下
alter user scott account unlock;
解鎖完之后就可以進行登錄和使用,如果安裝時沒有設置scott用戶的密碼時,默認密碼是tiger
一:rownum和分頁
ROWNUM:表示行號,實際上此是一個列,但是這個列是一個偽列,此列可以在每張表中出現。
例子:根據rownum獲取emp表中的前三條數據
select rownum,emp.* from emp where rownum <=3
rownum不支持大於號(>)的操作
當我們想獲取中間的幾條數據的時候,可以使用子查詢來進行分頁效果
第一種分頁方式(效率最高)
select * from (select rownum pnum,emp.* from emp) p where p.pnum>0 and p.pnum<3
第二種分頁方式
select * from (select rownum pnum,p1.* from emp p1 where rownum<3) p2 where p2.pnum >0
第三種
select * from (select rownum pnum,p1.* from (select * from emp)p1 where rownum <3) p2 where p2.pnum >0
二、視圖
視圖就是封裝了一條復雜查詢的語句。
語法:
CREATE VIEW 視圖名稱 AS 子查詢
創建一個視圖,只保留empno,ename兩列數據
創建視圖的用戶必須要有DBA的權限
create view emp_view as (select empno,ename from emp);
查看視圖和查看表的語句是一樣的,只不過把表名換成了視圖名
視圖不用於保存數據,對視圖進行DML操作,其實操作的就是真實的物理表,所以我們可以把視圖設置成只讀的
語法
CREATE OR REPLACE VIEW 視圖名稱 AS 子查詢 WITH READ ONLY
刪除索引
DROP VIEW 視圖名稱
三:PL/SQL
3.1PL/SQL是什么?
PLSQL 是Oracle 對sql 語言的過程化擴展,指在SQL 命令語言中增加了過程處理語句(如分支、循環等),使 SQL 語言具有過程處理能力。把 SQL 語言的數據操縱能力與過程語言的數據處理能力結合起來,使得PLSQL 面向過程但比過程語言簡單、高效、靈活和實用。
程序語法:
declare 說明部分 (變量說明,游標申明,例外說明 ) begin 語句序列(DML 語句)… exception 例外處理語句 End;
3.2變量
3.2.1常量
--常量 declare empname varchar(255) :='天雁'; begin dbms_output.put_line(empname); end;
3.2.2引用型變量
declare emprec emp.ename%type; --引用某一張表中的某一列 begin select t.ename into emprec from emp t where t.empno = 7369; dbms_output.put_line(emprec); end;
3.2.3記錄型變量
declare p emp%rowtype; --記錄了一張表 begin select * into p from emp t where t.empno = 7369; dbms_output.put_line(p.ename || ' ' || p.sal); end;
3.2判斷分支
語法 1: IF 條件 THEN 語句 1; 語句 2; END IF; 語法 2: IF 條件 THEN 語句序列 1; ELSE 語句序列 2; END IF; 語法 3: IF 條件 THEN 語 句 ; ELSIF 語句 THEN 語句;
例子
declare mynum number := # --&num從控制台接受一個number類型的值 begin if mynum < 5 then dbms_output.put_line('輸入的值小於5'); elsif mynum >=5 and mynum<=10 then dbms_output.put_line('輸入的值在5和10之間'); elsif mynum >10 then dbms_output.put_line('輸入的值大於10'); end if; end;
3.3 循環(loop)
3.3.1語法 1:
WHILE total <= 25000 LOOP .. . total : = total + salary; END LOOP;
例子:輸出一到十
declare pcount number := 1; begin while pcount<=10 loop dbms_output.put_line(pcount); pcount :=pcount+1; end loop; end;
3.3.2語法 2:
Loop EXIT [when 條件]; …… End loop
例子:輸出一到十
declare pcount number := 1; begin loop exit when pcount>10; --終止循環的條件,當條件滿足時終止 dbms_output.put_line(pcount); pcount :=pcount+1; end loop; end;
3.3.3語法 3(for)
FOR I IN 1 . . 3 LOOP 語句序列 ; END LOOP ;
輸出1到100
declare pcount number := 1; begin for pcount in 1..100 loop --自己進行+1操作 dbms_output.put_line(pcount); end loop; end;
3.4 游標 Cursor
游標的含義
在寫 java 程序中有集合的概念,那么在 pl/sql 中也會用到多條記錄,這時候我們就要用到游標, 游標可以存儲查詢返回的多條數據。
在PL/SQL塊中執行SELECT、INSERT、DELETE和UPDATE語句時,ORACLE會在內存中為其分配上下文區(Context Area),即緩沖區。游標是指向該區的一個指針,或是命名一個工作區(Work Area),或是一種結構化數據類型。它為應用等量齊觀提供了一種對具有多行數據查詢結果集中的每一行數據分別進行單獨處理的方法,是設計嵌入式SQL語句的應用程序的常用編程方式。
語法:
CURSOR 游標名 [ (參數名 數據類型,參數名 數據類型,...)] IS SELECT 語句;
--游標的使用步驟
--1.聲明游標 CURSOR 游標名 [ (參數名 數據類型,參數名 數據類型,...)] IS SELECT 語句;
--2.打開游標 open 游標名
--3.取一行游標的值:fetch 游標名 into 變量名
--4.關閉游標: close 游標名
declare cursor myemp is select * from emp;--聲明 pemp emp%Rowtype; begin open myemp;--打開 loop fetch myemp into pemp; --循環讀取每一條記錄放到記錄變量中 exit when myemp%notfound; --循環終止條件 dbms_output.put_line(pemp.ename); end loop; close myemp; --關閉 end;
3.5存儲過程
存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的 SQL 語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來 執行它。存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存 儲過程。
語法:
create [or replace] PROCEDURE 過程名[(參數名 in/out 數據類型)] AS begin PLSQL 子程序體; End; 或者 create [or replace] PROCEDURE 過程名[(參數名 in/out 數據類型)] is begin PLSQL 子程序體; End 過程名;
創建一個名為helloworld存儲過程
create or replace procedure helloworld is begin dbms_output.put_line('helloworld'); end helloworld;
進行調用helloworld
begin helloworld; end;