一.认识dual:
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:
1、查看当前用户,可以在 SQL Plus中执行下面语句
select user from dual;
2、用来调用系统函数
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间
select dbms_random.random from dual; --获得一个随机数
3、得到序列的下一个值或当前值,用下面语句
select seq_msg.nextval from dual;--获得序列your_sequence的下一个值
select seq_msg.currval from dual;--获得序列your_sequence的当前值
--根据序列计算当前id
select seq_msg.nextval into v_id from dual;
4、可以用做计算器
select 7*9 from dual;
二、存储过程:
create or replace procedure pro_1(无参)
as
v_id integer;
v_sumage integer;
v_avgage integer;
begin
--根据序列计算当前id
-- select m_user.nextval into v_id from dual;
--计算当前总年龄
select sum(vAge) into v_sumage from v_student;
--计算平均年龄
select avg(vAge) into v_avgage from v_student;
--往汇总表插入数据
insert into v_total(id,totalage,avgage)values(1,v_sumage,v_avgage);
exception
when others then
rollback;
end;
declare --调用
begin
pro_1();
end;
2、有参:
create or replace procedure pro_add(
num1 in integer,
num2 in integer,
v_sum out integer
)as
begin
v_sum:=num1+num2;
commit;
exception
when others then
rollback;
end;
declare
v_sum integer;
begin
pro_add(3,4,v_sum);
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
三、函数:
聚合函数:
select max(stu_score),min(stu_id),avg(stu_score),sum(stu_score),count(stu_id) from student;
转换为字符:
select to_char(sysdate,'yyyy-mm-dd') from dual;
生成随机数并取整
select floor(dbms_random.value(100,1000)) from dual;
生成0-1间的随机数
select dbms_random.value from dual;
分组
select deptno, avg(sal) from emp group by deptno;
显示员工的名字、工资及部门的名称,并按部门名称升序排序
select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno order by d.deptno;