Oracle PLSQL:
PLSQL:
符號:
賦值: :=
基本示例:
set serveroutput on //設置輸出打開. declare --說明部分 begin --程序 dbms_output.put_line(‘Hello World‘); exception end; /
引用型變量:
--查詢7839的姓名和薪水
--查詢7839的姓名和薪水set serveroutput on declare --定義變量保存姓名和薪水 --pename varchar2(20); --psal number; 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; /
記錄型變量(代表了一行,多個列,類似數組)
--查詢7839的姓名和薪水
set serveroutput on 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; /
IF語句
--判斷用戶從鍵盤輸入的數字
set serveroutput on --接收鍵盤輸入 --num: 地址值,在該地址上 保存了輸入的值 accept num prompt ‘請輸入一個數字‘; //accept 命令 declare --定義變量保存輸入的數字 pnum number := # //從地址上取出數字 使用 & begin if pnum = 0 then dbms_output.put_line(‘您輸入的是0‘); elsif pnum = 1 then dbms_output.put_line(‘您輸入的是1‘); elsif pnum = 2 then dbms_output.put_line(‘您輸入的是2‘); else dbms_output.put_line(‘其他數字‘); end if; end; /
循環語句(共有三種方式,此處舉例一種):
--打印1~10
set serveroutput on declare pnum number := 1; begin loop --退出條件 exit when pnum > 10; dbms_output.put_line(pnum); --加一 pnum := pnum + 1; end loop; end; /
Cursor:光標(相當一個resultset, 結果集):
1. 光標的屬性:
%isopen %rowcount (影響的行數)
%found %notfound
2. 默認,一個會話中只能打開300個光標
show parameter cursor //查看參數 --->後面兩個都是這裏查來的
修改: alter system/session set open_cursors=400;
3. cursor_sharing ---> 性能優化
EXACT(默認), FORCE(提性能), SIMILAR
例子:
--查詢並打印員工的姓名和薪水(不帶參數)
set serveroutput on 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; /
例二(帶參數):
--查詢某個部門的員工姓名
set serveroutput on 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; /
exception(例外)
系統例外:
No_data_found (沒有找到數據)
Too_many_rows (select into 語句匹配多個行)
Zero_Divide (被 0 除)
Value_error (算數或者轉換異常)
Timeout_on_resource (等待資源超時)
--被0除
set serveroutput on declare pnum number; begin pnum := 1/0; exception when zero_divide then dbms_output.put_line(‘1:0不能做分母‘); dbms_output.put_line(‘2:0不能做分母‘); when value_error then dbms_output.put_line(‘算術或者轉換錯誤‘); when others then dbms_output.put_line(‘其他例外‘); end; /
自定義例外:
--查詢50號部門的員工姓名
set serveroutput on declare 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; //拋出例外 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; /
Oracle PLSQL: