1. 程式人生 > >oracle ---- pl/sql

oracle ---- pl/sql

hadoop 基於java ,,spark 基於scala
--------------記錄型變數
declare 
   -- 定義記錄型變數:代表一行
   emp_rec     emp%rowtype;
begin
   select * into emp_rec from emp where empno=7839;  
   dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);  
end;
-------------------- 引用型變數
declare 
   pename    emp.ename%type;
   psal          emp.sal%type;
begin
   select ename,sal into pename,psal from emp where empno=7839;
   dbms_output.put_line(pename||'的薪水是'||psal);
end;
------------------------IF語句
         if   條件  then  語句1   
  elsif   條件  then  語句2  
    else  語句3 
   endif ;
------------------------迴圈
declare 
    pnum number := 1;
 begin
   loop
         --迴圈
         --退出條件
        exit when pnum > 10;
        dbms_output.put_line(pnum);
        --加一
       pnum := pnum + 1;
   end loop;
 end;
-------------------------游標
declare 
  -- 定義游標
  cursor  cemp  is     select    ename,sal    from      emp;
  pename      emp.ename%type;
  psal             emp.sal%type;
begin
  -- 開啟游標
  open cemp;
  loop
        ------取當前記錄
        fetch cemp into pename,psal;
        -------exit when 沒有取到記錄;
        exit when  cemp%notfound;
        dbms_output.put_line(pename||'的薪水是'||psal);
   end loop;
  --關閉游標
  close cemp;
end;
------------------------帶引數的游標
declare 
     cursor   cemp(dno number)    is   select ename from emp where deptno=dno;
     pename    emp.ename%type;
begin
   open cemp(20);
   loop
        fetch cemp  into  pename;
        ---找不到退出
        exit   when    cemp%notfound;
        dbms_output.put_line(pename);
   end loop;
  close cemp;
end;
-------------------異常    系統例外
declare 
  pnum number;
begin
  pnum := 1/0; 
exception
  when   zero_divide    then      dbms_output.put_line('0不能做分母'); dbms_output.put_line('零不能做分母');
  when   value_error    then      dbms_output.put_line('算術或者轉換錯誤');
  when   others            then      dbms_output.put_line('其他例外');
end; 
------------------------------異常 自定義例外demo
-- 查詢50號部門的員工姓名
declare 
  --定義游標:代表50號部門的員工
  cursor    cemp  is select ename from emp where deptno=50;
  pename  emp.ename%type;
  --自定義例外
  no_emp_found exception;
begin
  open cemp;
   --取第一條記錄
  fetch cemp into pename;
  if  cemp%notfound   then
      --丟擲例外
      raise no_emp_found; --相當於java的throws
  end if;
  --pmon程序: process monitor
  close cemp;
exception 
    when   no_emp_found   then   dbms_output.put_line('沒有找到員工');  
    when   others   then   dbms_output.put_line('其他例外');  
end;