Oracle(六)PL/SQL、迴圈和遊標

來源:互聯網
上載者:User

標籤:部分   ase   資料庫   http   otf   grant   自動   添加   HERE   

 

 

 

-- View:視圖(虛表),不佔用物理空間!
--  如果沒有許可權
-- 使用dba登入  grant  create any  view to 使用者名稱;

create or replace  view  teacher_view
as
select tname,sal from teacher

--  查詢檢視
select * from teacher_view

************=======PL/SQL=======*************

 

--PL/SQL (Procedural  Language) 過程化sql語言! 在原本的sql語句上 添加了 邏輯判斷
--迴圈等操作!   在資料庫 執行pl/sql程式時,pl/sql和sql語句時分別進行解析和執行的!

--文法結構     :=  就是指派陳述式
--01.declare   可選部分  聲明 : 變數, 異常,遊標...

--02.begin     必要部分   書寫:sql語句 和pl/sql語句

--03.exception  可選部分   針對出現異常時候的處理

--04.end       必要部分


-- 根據指定老師的編號查詢薪水  輸出一個結果
declare
  v_name  teacher.tname%type;
  v_sal   teacher.sal%type;
  v_result  varchar2(30);
begin
    select t.tname,t.sal into v_name,v_sal from teacher t where  tno=1002;
   --根據薪水   得到不同的返回結果
    if v_sal>=2000 and v_sal<=10000 then
      v_result:=‘還可以吧‘;
    elsif v_sal>10000 and v_sal<=40000 then
      v_result:=‘真可以‘;
    elsif v_sal>40000 then
      v_result:=‘牛牛牛‘;
    else
       v_result:=‘咩咩‘;
    end if;
      dbms_output.put_line(v_name||‘:‘||v_sal||‘=====‘||v_result);
   
    --根據 v_result的值 輸出不同的結果
    case v_result
      when ‘還可以吧‘ then
         dbms_output.put_line(v_name||‘工資在2k到10k‘);
      when  ‘真可以‘ then
          dbms_output.put_line(v_name||‘工資在10k到40k‘);
      when ‘牛牛牛‘ then
         dbms_output.put_line(v_name||‘工資在40k以上‘);
        else
             dbms_output.put_line(v_name||‘工資2k以下‘);
      end case; 
    
end;

************=======迴圈=======*************

--迴圈結構
--01.loop 文法
   loop
     執行的語句;
     exit when 條件;
   end loop;
  

declare
i number;
begin
  i:=1;
  loop
    dbms_output.put_line(i);
    i:=i+1;
    exit when i>50;
   end loop;
end;
   
--02.while  文法
  while 條件  loop
   執行的語句;
  end loop;

declare
i number;
begin
  i:=1;
  while i<=50 loop
    dbms_output.put_line(i);
    i:=i+1; 
   end loop;
end;


--03.for 文法

for 變數 in  範圍(上限,下限)loop
  執行的語句;
end loop;

declare
i number;
begin
for i in 1..50
   loop
    dbms_output.put_line(i);
   end loop;
end;

************=======遊標=======*************

--遊標:是系統給我們使用者 開設一個資料緩衝區! 存放的是sql語句執行的結果!
--每個遊標區都有一個名字,使用者通過遊標一行一行的擷取記錄!

--01.隱式遊標  在我們Pl/sql中,程式執行sql語句時 自動建立! ====>sql
--02.顯示遊標  可以返回多行的查詢!
--03.REF遊標   用於處理運行時才能確定的動態SQL 查詢結果

--隱式遊標屬性
   --01.sql%found   影響了一行或者多行 都返回 true
   --02.sql%notfound   沒有影響行數   返回 true
   --03.sql%rowcount    sql語句影響的行數
   --04.sql%isopen    遊標是否開啟,始終為false
declare
tname  teacher.tname%type; --聲明一個變數
  cursor teacher_cursor  is  select tname from teacher; --聲明遊標
begin
   open teacher_cursor;  --開啟遊標
    fetch teacher_cursor into tname;
   --迴圈輸出tname
   while teacher_cursor%found
     loop
       dbms_output.put_line(‘教師的姓名====‘||tname);
       fetch teacher_cursor into tname;
     end loop;
   close teacher_cursor;--關閉遊標
end; 

Oracle(六)PL/SQL、迴圈和遊標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.