Oracle數據庫—— PL/SQL進階編程


一、涉及內容

  1.掌握PL/SQL程序塊的結構

  2.理解並熟練掌握各種變量的應用。

二、具體操作

1、創建一個表messages,該表只有一個字段results 類型是number(2),編寫一個塊,向messages表中添加數字1到10,但不包括6和8。

(1)創建表

 

(2)添加數字

   語句:

DECLARE
 v_num NUMBER(2):=0;
 BEGIN
  FOR i IN 1..10 loop
      v_num:=v_num+1;
      if i <> 6 and i <> 8 then
         insert into messages values(v_num);
      end if;
  END LOOP;
 dbms_output.put_line('results:'||v_num);
end;

截圖:

 

查看表:

 

2、創建一個塊,按照emp表中員工的工資sal修改他的獎金comm的值。具體要求(塊的要求是(2)-(7))如下:

(1)給emp表添加一行數據,其中工資sal和獎金comm都為NULL空值。

(2)通過替代變量讀取員工編號。

(3)如果該員工的工資小於1000美元,則他的獎金為工資的10%

(4)如果該員工的工資在1000~1500美元,則獎金為工資的15%

(5)如果該員工的工資大於1500美元,則獎金為工資的20%

(6)如果該員工的工資為NULL,則獎金為0

(7)運行PL/SQL塊,輸入不同的員工編號,驗證更新后的獎金值

首先,插入一行數據:

 

語句:

DECLARE
  v_empno scott.emp.empno%type;
  v_sal NUMBER(7,2);
  v_comm scott.emp.comm%type;

BEGIN
  v_empno:=&no;
  SELECT sal INTO v_sal
  FROM scott.emp WHERE empno=v_empno;
  case  
  when v_sal<1000  THEN
     UPDATE scott.emp SET comm=v_sal*0.1 WHERE empno=v_empno;

  when v_sal<=1500 THEN
     UPDATE scott.emp SET comm=v_sal*0.15 WHERE empno=v_empno;

  when v_sal>1500 THEN
     UPDATE scott.emp SET comm=v_sal*0.2 WHERE empno=v_empno;

  when v_sal is null THEN
     UPDATE scott.emp SET comm=0 WHERE empno=v_empno;

   else
     dbms_output.put_line('error');

END case;

 SELECT comm INTO v_comm FROM scott.emp WHERE empno=v_empno;

dbms_output.put_line('empno:'||v_empno||'   comm:'||v_comm);

END;

截圖:

 

 

3、為emp表增加一個列stars,類型為VARCHAR2(100)。

 

 

4、創建一個PL/SQL塊,通過替代變量讀取員工編號,根據員工的工資計算他能獲得的星號“*”數量,每100美元獎勵一個星號,按四舍五入處理。並根據員工所獲得的星號數量n,形成由n個星號組成的字符串,寫入emp表的stars列。

語句:

declare
  v_no number(6):=&no;
  v_sal NUMBER(7,2);
  v_star  varchar2(200);
  v_n  integer;
begin
  select round(sal/100) into v_n
  from scott.emp where empno=v_no;
  for i in 1..v_n loop
      v_star:= v_star || '*';
     end loop;
  update scott.emp set stars = v_star where empno = v_no;
  dbms_output.put_line('empno:'||v_no||' stars:'||v_star);
end; 

截圖:

 

 

5、創建一個PL/SQL塊,從dept表中查詢每個部門的名稱。具體要求如下:

(1)聲明一個記錄表類型的變量my_tab,用來存放部門名稱。

(2)用循環語句從dept表中查詢每個部門名稱,放入my_tab中。

(3)再使用一個循環將my_tab中的部門名稱輸出到屏幕上。

語句:

DECLARE
  type dept_name_table_type is table of scott.dept.dname%type
  index by binary_integer;
  my_tab dept_name_table_type;
BEGIN
  for i in 1..4 loop
     select dname into my_tab(i)
     from scott.dept
     where deptno=i*10;
    end loop;
  for i in 1..4 loop
     dbms_output.put_line('dname:'||my_tab(i));
  end loop;
END; 

截圖:

 

 

6、修改上一題,從dept表中查詢各個部門的所有信息,並輸出到屏幕上。

語句:

DECLARE
  type dept_record_type is record(
  no scott.dept.deptno%type,
  name scott.dept.dname%type,
  location scott.dept.loc%type);
  type dept_table_type is table of dept_record_type
   index by binary_integer;
  my_tab dept_table_type;
BEGIN
  for i in 1..4 loop
     select * into my_tab(i)
     from scott.dept
     where deptno=i*10;
     dbms_output.put_line('deptno:'||my_tab(i).no||
'  dname:'||my_tab(i).name||'    loc:'||my_tab(i).location);
  end loop;
END;

 截圖:

 

 


免責聲明!

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



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