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;

猜你喜欢

转载自blog.csdn.net/zzybbh/article/details/84097041