码迷,mamicode.com
首页 > 其他好文 > 详细

produceTestDate

时间:2017-08-04 13:46:18      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:tom   otf   员工   err   blog   rac   hello   sysdate   定义变量   

set serveroutput on
--使用基本变量类型
declare
  --定义基本变量;类型
  --基本数据类型
  pnumber number(7, 2);
  pname   varchar2(20);
  pdate   date;
begin
  pnumber := 1;
  dbms_output.put_line(pnumber);
  dbms_output.put_line(hello);
  pname :=tom;
  dbms_output.put_line(pname);
  pdate := sysdate;
  dbms_output.put_line(pdate);
  --明天的日期
  dbms_output.put_line(pdate + 1);
end;
/


--引用型变量
set serveroutput on

declare
--定义引用型变量,查询并打印7839的姓名和薪水
--pname varchar2(20);
--psal number(7,2);
       pname EMP_bch.Ename%type;
       psal EMP_bch.Sal%type;
begin
--得到7839的姓名和薪水
     select ename,sal into pname,psal from EMP_bch where empno=7839;
     --打印姓名和薪水
     dbms_output.put_line(pname||的薪水是||psal);

end;
/


--记录型变量,查询并打印7839的姓名和薪水
set serveroutput on 

declare
    --定义记录型变量:注意代表一行
    EMP_bch_rec EMP_bch%rowtype;
begin
    --得到7839的一行信息
    select * into EMP_bch_rec from EMP_bch where empno=7839; 
    --打印姓名和薪水
    dbms_output.put_line(EMP_bch_rec.ename||的薪水是||EMP_bch_rec.sal);   
end;
/


--IF语句练习
/*
*判断用户从键盘输入的数字
1.如何使用IF语句
2.如何接受几个键盘输入(字符串)
*/
set serveroutput on

--接受键盘输入
--num是一个地址值:在该地址上保存了输入的值
accept num prompt请输入一个数字;


declare

--定义变量保存用户从键盘输入的数字
pnum number:=# 
begin
--执行IF语句进行条件判断
     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;
/




--使用while循环 循环打印1——10
--打开输出
set serveroutput on

declare 
    --定义循环变量
pnum  number:=1;
begin 
  while pnum<=10 loop
  --循环体
   dbms_output.put_line(pnum);
  --使变量自增
  pnum := pnum + 1;
  end loop;
end;
/
    
--推荐使用!!!
--使用loop循环打印1——10
set serveroutput on

declare
--定义循环变量,并赋初始值为1
pnum number:=1;

begin 
     loop
     --退出条件,循环变量大于10
     exit when pnum >10;
     
     --打印该变量的值
     dbms_output.put_line(pnum);
     
     --变量自增一
     pnum := pnum +1;
     
     end loop;
end;
/


--使用循环FOR循环打印1——10
set serveroutput on
 declare
 --定义循环变量并赋初值为1
 pnum number:=1;

begin
  for pnum in 1..10 loop
  dbms_output.put_line(pnum); 
  end loop;
end;
/

--游标的练习
set serveroutput on
declare
    --定义一个游标
    --游标属性 %found 取到值为true,取不到为false,%notfound相反
cursor cemp is select ename,sal from EMP_bch;
    pname EMP_bch.ename%type;
    psal  EMP_bch.sal%type;
begin 
    --打开游标
open cemp;
loop
     --取一条记录
 fetch cemp into pname,psal;
     --1.循环什么时候退出? 
     --fetch 不一定能取到记录 
exit when cemp%notfound;
     --打印结果
dbms_output.put_line(pname||的薪水是||psal); 
end loop;
    --关闭游标
close cemp;
end;
/    
    

--给员工涨工资 总裁:1000,经理:800,其他:400
set serveroutput on
declare
--定义游标给哪些员工涨工资
cursor cemp is select empno,job  from EMP_bch;
pempno EMP_bch.Empno%type;
pjob   EMP_bch.Job%type;
begin
rollback;
 --打开游标
 open cemp;
 if cemp%isopen then 
    dbms_output.put_line(游标已经打开);
    else
    dbms_output.put_line(游标没有打开);
 loop
 fetch cemp into pempno,pjob;
 exit when cemp%notfound;
 --判断员工的职位
  if pjob =PRESIDENT then update EMP_bch set sal = sal+1000 where empno=pempno;
     elsif pjob =MANAGER then update EMP_bch set sal = sal+800 where empno=pempno;
     else update EMP_bch set sal = sal+400 where empno=pempno;
 end if;
 end loop;
 --关闭游标
 close cemp;
 --对于oracle,默认的事物隔离级别是read committed
 commit;
 dbms_output.put_line(涨工资完成); 
end;
/



/*
游标的属性
%found %motfound
%isopen:判断游标是否打开
%rowcount:影响的行数
有标的限制:默认情况下只允许在同一个会话中打开300个游标

*/
set  serveroutput on

declare

--定义游标

cursor cemp is select empno,job from Emp_Bch;
pempno Emp_Bch.Empno%type;
pjob   Emp_Bch.Job%type;
begin 
loop
open cemp;
--取出一条记录
fetch cemp into pempno,pjob;
cemp%notfound;
exit when cemp%notfound;
--if pjob=‘PRESIDENT‘ then 
dbms_output.put_line(rowcount||cemp%rowcount);

--end if;
close cemp;
end loop;
end;
/


--带参数的游标
set serveroutput on

declare
--带参数的游标
cursor cemp(dno number) is select ename from EMP_BCH where deptno = dno;
pename EMP_BCH.ENAME%TYPE;
begin
--打开游标
open cemp(10);
loop
fetch cemp into pename; 
exit when cemp%notfound;
dbms_output.put_line(pename);


end loop;
close cemp;
end;
/ 


--系统异常:no_data_found
set serveroutput on
declare
pename EMP_BCH.ENAME%TYPE;

begin 
SELECT ENAME into pename FROM EMP_BCH WHERE EMPNO=1234;
exception 
       when no_data_found then dbms_output.put_line(没有找到员工);
       when others then dbms_output.put_line(其他异常);
end;
/



--系统异常  too_many_rows
set serveroutput on

declare
    pename EMP_bch.ename%type;
    
begin
    --查询所有员工的姓名
    select ename INTO pename from EMP_BCH WHERE DEPTNO=10;
    exception
    when too_many_rows then dbms_output.put_line(select into 匹配了多行);
    when others then dbms_output.put_line(其他异常);
end;
/



--系统异常  zero_devide
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(1;0不能做被除数);
     when others then dbms_output.put_line(其他例外);
end;
/


--系统异常   value_error
set serveroutput  on
declare
    --定义一个number类型的变量
    pnum number;
begin
    pnum:=abc;
    exception
    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_BCH where DEPTNO=50;
pename EMP_BCH.ENAME%TYPE;
--自定义异常
no_emp_found exception;
begin
OPEN CEMP;
--取到一个用户
FETCH cemp into pename;
if cemp%notfound then 
raise no_emp_found;
end if;

CLOSE CEMP;
      exception when no_emp_found then dbms_output.put_line(没有找到员工);
                when others then dbms_output.put_line(其他例外);
end;
/
/*
loop
exit when cemp%notfound;
end loop;
*/



--瀑布模型
/*
sql语句
SELECT TO_CHAR(HITEDATE,‘yyyy‘) from EMP_bch;
-->游标-->循环-->退出条件:notfound
变量:1.初始值 2.如何得到
每年入职的员工数
count80 number:=0;
count81 number:=0;
count82 number:=0;
count87 number:=0;
*/
set serveroutput on
declare
    --定义游标
    cursor cemp
    is
    select to_char(hiredate,yyyy) from EMP_bch;
    phiredate varchar2(4);
    --入职人数
    count80 number:=0;
    count81 number:=0;
    count82 number:=0;
    count87 number:=0;
begin
open cemp;
loop
fetch cemp into phiredate;
exit when cemp%notfound;
--判断入职年份
if phiredate=1980  then  count80:=count80+1;
elsif phiredate=1981 then  count81:=count81+1;
elsif phiredate=1982 then  count82:=count82+1;
else count87:=count87+1;
end if;  
end loop;
close cemp;
--输出结果
dbms_output.put_line(Total:||(count80+count81+count82+count87)); 
dbms_output.put_line(1980:||count80); 
dbms_output.put_line(1981:||count81); 
dbms_output.put_line(1982:||count82); 
dbms_output.put_line(1987:||count87); 
end;
/

 

produceTestDate

标签:tom   otf   员工   err   blog   rac   hello   sysdate   定义变量   

原文地址:http://www.cnblogs.com/pzx-java/p/7284472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!