1. 程式人生 > >Oracle中PL/SQL的關鍵語法

Oracle中PL/SQL的關鍵語法

—ch01
–distinct 過濾重複資料
select distinct(ename) from emp;

----- 分頁
–rownum 偽列 根據你的查詢結果,臨時編號,不能用> 來運算
–rowid 標識列 資料儲存進表裡面的時候,已經生成了一個唯一值
–and job =‘SALESMAN’
–and rowid =‘AAAR3sAAEAAAACXAAA’
select * from
(select rownum rn ,rowid id, e.* from emp e
where 1=1
and rownum <=2*5
)
where 1=1
—and rn between 11 and 15
and rn >(2-1)*5

每頁顯示5筆
(currPage-1)pageSize+1 currPagepageSize
1 5 第一頁
6 10 第二頁
(3-1)5+1 35 第三頁

–rank rank() over (partition by deptno order by sal desc)
–分析函式,給資料先分組,然後再排序,遇到相同資料,增量會佔用掉
–rank
select ename,sal,deptno
– ,rank() over(partition by deptno order by sal) “rank” --值相同,用掉排序的值,2,2,2,5,6
–,dense_rank() over(partition by deptno order by sal) “dense_rank” --值相同,不會用掉排序的值 2,2,3,4,5
,row_number() over(partition by deptno order by sal) “rownum” --不考慮值相同的情況
from emp

—decode(列,值1,處理結果1,值2,處理結果2,其他)函式,相當於switch .
—nvl(列,值) 函式, 如果列為空,就顯示第二個引數的值
select deptno
,decode(deptno,10,‘開發部’,‘不知道’) “部門名稱”
,decode(deptno,10,‘開發部’,20,‘財務部’,30,‘人事部’,‘不知道’) “部門名稱”
from emp
order by deptno

select ename,mgr,nvl(mgr,211) from emp

–ch02
–序列 sequence,使用時,用序列名稱.nextval(下一個值)或currval(當前值)
select seq_stuInfo.Currval from dual

–ch03
—% type , %rowtype
—for迴圈
—遊標
----控制檯輸出
begin
dbms_output.put_line(‘控制檯輸出’);
end;

------%rowtype , %type的用法
declare
stuno int :=1; --宣告: 變數名稱 資料型別 := 值 (注意冒號)
v_empno emp.empno%type :=7788; --v_empno 只能是emp表的empno
v_rec emp%rowtype; --v_rec 可以是emp表的一行資料(包含每個列的值)
begin
select *
into v_rec --在語句塊中執行,select的內容都要用into放到變數中去
from emp
where empno = v_empno;
dbms_output.put_line('empname: ’ || v_rec.ename);
end;

-----for迴圈的用法
declare
cname varchar2(50) :=‘t211’;
begin
for i in 1…10
loop
dbms_output.put_line('班級編號: ’ || cname);
dbms_output.put_line('i: ’ || i );
end loop;
end;

—儲存過程
–declare
create or replace procedure proc_getEmpList(v_empno number)
is
cursor cu_emp is

 select * from emp;

lr_emp cu_emp%rowtype;

begin
dbms_output.put_line('v_empno: ’ || v_empno);
for lr_emp in cu_emp
loop
dbms_output.put_line('empName: ’ || lr_emp.ename);
end loop;
end;

----呼叫儲存過程
declare
– v_num number;
begin
proc_getEmpList(123);
end;