Oracle中的plsql语句的小基础

declare   --声明

    msg char(15); --定义变量

    sal number(7,2);  --数字类型

    married boolean:=true; --boolean类型

    begin          --开始

       msg:='HelloWorld'; --赋值

       dbms_output.put_line(msg); --输出

   end; --结束

--声明的类型为 与emp.sal类型一致的变量

declare 

   sal emp.sal%type; ---和emp表中的 sal类型一样

   begin

     --sal:=100.99;

     select sal into sal from emp where empno=7499;

     dbms_output.put_line(sal);

   end;

   

   

--记录一行

declare  ---声明

  emp_rec emp%rowtype; --emp_rec 变量 类型  emp%rowtype

  begin

    select * into emp_rec  from emp where empno=7499; ---给emp_rec赋值的时候 必须给它一条记录   into emp_rec   赋值的意思

    dbms_output.put_line(emp_rec.deptno);  ---输出  emp_rec.sal

  end; --结束

 

select * from emp;

--If语句 形式1

declare

    grade number(5,2);

   begin

     grade:=80;

     if  grade>70 then

          dbms_output.put_line('成绩优秀');

     end if;

   end;

--if语句 形式2

 declare

    grade number(5,2);

   begin

     grade:=60;

     if  grade>70 then

          dbms_output.put_line('成绩优秀');

     else 

         dbms_output.put_line('需要努力');

     end if;

   end;

   

   

 --if 语句 形式3

 

  declare

    grade number(5,2);

   begin

     grade:=60;

     if  grade>70 then

          dbms_output.put_line('成绩优秀');

     elsif grade>50 then                     ---一定要注意  这里是elsif 

         dbms_output.put_line('需要努力');

     else

         dbms_output.put_line('努力');

     end if;

   end;

 

 

   

accept num prompt('请输入一个数字');--接受键盘输入的值   这里会自动保存到num 中   下面就可以通过plsql语句操作了

declare  --声明

 pnum number := # --注意 &num &取值的意思 &num把它赋值给 pnum      注意  声明变量  变量  变量类型[:=赋予的值]

 begin

  dbms_output.put_line(pnum);

 if pnum>10 then

   dbms_output.put_line('输入的数字大于10');

 end if;

 end;

   

 

 

 

 

---循环语句

 declare  --声明

 pnum number := 1;--注意  声明变量  变量  变量类型[:=赋予的值]

 begin  

  while pnum<10  --while语句

  loop   --循环的开始

  dbms_output.put_line(pnum);

  pnum:=pnum+1; --循环改变的条件

  end loop; --循环的结束

 end;

 

 

 ---循环语句

 declare  --声明

 pnum number := 1;--注意  声明变量  变量  变量类型[:=赋予的值]

 begin  

  loop   --循环的开始

    exit when pnum>10;   --循环退出的条件

     dbms_output.put_line(pnum);

     pnum:=pnum+1; --循环改变的条件

  

  end loop; --循环的结束

 end;

 ---循环语句

 declare  --声明

 pnum number := 1;--注意  声明变量  变量  变量类型[:=赋予的值]

 begin  

     for i in 1..10

  loop   --循环的开始

    dbms_output.put_line(i); 

  

  end loop; --循环的结束

 end;

 

 

  ---循环语句

 declare  --声明

 begin  

     for i in 1..10  --in 变量  变量必须是游标

  loop   --循环的开始

    dbms_output.put_line(i); 

  end loop; --循环的结束

 end;

select * from emp;

 --给manager 涨 800  salesaman 400 其它涨 200

 

declare

   job_rec emp.job%type; 

   begin

     select job into job_rec from emp;  --存在问题1 : 返回的job岗位为多个 而 job_rec只能接受一个值

     if job_rec = 'MANAGER' then

        update emp set sal=sal+800;    --存在问题2 :  update 语句有where条件

     elsif job_rec='SALESMAN' then

        update emp set sal=sal+400;

     else

        update emp set sal=sal+200;

     end if;

   end;

   

   

   

    -- 游标的主要属性如下:

       --  %found 布尔属性  如果sql语句至少影响一行 则为true 否则为false

       --  %notfound 布尔属性 与%found相反。 

       --  %isopen 布尔属性 游标是否打开  打开为true 否则为false

       -- %rowcount 数字属性 返回受sql语句影响的行数

   

--查询sql语句

 declare

 emp_rec emp%rowtype;--记录

 begin

    select * into emp_rec from emp where empno=7499;

    dbms_output.put_line('结果'||sql%rowcount);

 end;

 

 --更新sql语句

declare

 begin

    update emp set sal=3000  where empno=7499;

    if sql%found then

    dbms_output.put_line('更新的记录数'||sql%rowcount);

    else

      dbms_output.put_line('没有更新记录');

    end if;

 end;

 

 

 declare

 begin

    update emp set sal=3000  where empno=7499;

    if sql%notfound then  --更新  false

      dbms_output.put_line('没有更新记录');

    else

      dbms_output.put_line('更新的记录数'||sql%rowcount);

    end if;

 end;

 

 

  ---隐式游标

declare  --声明

 emp_rec emp%rowtype;--记录

 begin  

     for emp_rec in (select * from emp)  --in 变量  变量必须是游标

  loop   --循环的开始

    dbms_output.put_line('员工名称:'||emp_rec.ename); 

  end loop; --循环的结束

 end;

 

 

 

 --声明游标,打开游标,检索数据,关闭游标。

 

 --声明游标

 declare

    cursor cl  is select * from emp; --查询出所有的emp记录 存储到 cl游标中

    emp_rec emp%rowtype;--记录

 begin

     open cl; --打开游标

     loop

        exit when cl%notfound;   --循环退出的条件  cl%notfound   当没有记录的时候 返回true    

        fetch cl into emp_rec;--检索数据

        dbms_output.put_line(emp_rec.empno);

     end loop;

     close cl;--关闭游标

 end; 

 

 

 

declare

    cursor cl  is select * from emp; --查询出所有的emp记录 存储到 cl游标中

 begin

    for emp_row in cl --打开游标 (自动)   检索数据(自动)  关闭游标(自动)  emp_row 变量也不需要定义

      loop 

        dbms_output.put_line(emp_row.ename);

     end loop;

 end; 

  

 

--带参数的游标

declare

    cursor cl(pno number)  is select * from emp where empno=pno; --查询出所有的emp记录 存储到 cl游标中

 begin

    for emp_row in cl(7499) --打开游标 (自动)   检索数据(自动)  关闭游标(自动)  emp_row 变量也不需要定义

      loop 

        dbms_output.put_line(emp_row.ename);

     end loop;

 end; 

 

 

 --涨工资的案例 

 --写一段PL/SQL程序,显示部门号为30的员工信息

  

 

 

 

 

 

 

 

 

 --例外

 --返回多行例外的处理

  declare

      emp_row emp%rowtype;

   begin

        select * into emp_row from emp; --隐式游标

        

    exception                  ---exception 例外的声明

       when too_many_rows then  --when 例外的名称(系统的例外 也可以是自定例外的名称) then 发生例外执行的操作

         dbms_output.put_line('实际返回了多行数据');

   end;

   

   

   

   --自定义的例外

   

   declare  

       no_data exception;  --声明自定义例外

       emp_row emp%rowtype;

       cursor cl(pno number) is  select *from emp where empno=pno;

    begin

        open cl(0000);

        fetch cl into emp_row;

        

        if cl%notfound then raise no_data; --在这里 抛出例外

        

        end if;

        

        close cl;

        exception  ---捕获例外

           when no_data then

              dbms_output.put_line('没有找到数据的错误');

    end;

   

   

   

   

   

   

   

   

   

   

   

   

   

 select * from emp;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值