oracle學習整理(一)


數據表使用的是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判斷分支

語法 1IF    條件    THEN 
    語句 1;
    語句 2;
END IF;

語法 2IF   條件    THEN    語句序列 1ELSE        語句序列 2END    IF;

語法 3IF    條件    THEN 語 句 ; 
ELSIF   語句    
THEN    語句;

例子

declare
  mynum number := &num;   --&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塊中執行SELECTINSERTDELETEUPDATE語句時,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;


免責聲明!

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



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