Oracle的pl/sql编程语言

学习笔记:

##pl/sql编程语言

    * 简介:
        * pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。
        * pl/sql编程语言比一般的过程化编程语言,更加灵活高效。
        * pl/sql编程语言主要用来编写存储过程和存储函数等。

    * 声明方法

declare 
begin
end;


--开启dbms_output输出
set serveroutput on
--声明方法
declare 
  i number(2) := 10;
  s varchar2(10):= '小明';
  ena emp.ename%type; --引用型变量
begin
  dbms_output.put_line(i);
  dbms_output.put_line(s);
  select ename into ena from emp where empno = 7788;
  dbms_output.put_line(ena);
end;
/

    * pl/sql中的if判断
        * 声明方法

declare
begin
  if then
  elsif then
  else
  end if
end;

        * 案例
        * 输入小于18的数字,输出未成年;输入大于18小于40的数字,输出中年人;输入大于40的数字,输出老年人

declare
  i number(3) := ⅈ
begin
  if i<18 then
    dbms_output.put_line('Young people');
  elsif i<40 then
    dbms_output.put_line('Middle-aged person');
  else
    dbms_output.put_line('Aged');
  end if;
end;

    * pl/sql中的循环
        * 1. while循环
            * 声明方法

declare
begin
  while loop
  end loop;
end;

            * 案例:输入1到10

declare
  i number(2) := 1;
begin
  while i<= 10 loop
    dbms_output.put_line(i);
    i := i+1;
  end loop;
end;

        * 2. exit循环(常用)
            * 声明方法

declare
begin
  loop
    exit when ;
  end loop;
end;

             * 案例:输入1到10

declare
 i number(2) := 1;
begin
  loop
    exit when i>10;
    dbms_output.put_line(i);
    i := i+1;
  end loop;
end;


        * 3. loop循环
            * 声明方法

declare
begin
  for i in 1..10 loop
  end loop;
end;

            * 案例:输入1到10

declare
 i number(2) := 1;
begin
  for i in 1..10 loop
    dbms_output.put_line(i);
    end loop;
end;

        *注意:
            *三个循环结束皆为end loop;(end先行)
            * exit循环中exit when ; 后面有一个封号
            * 在循环loop开始时都不需要加封号
            * end结束一定有封号


    * pl/sql中的游标
        * 概念:游标可以存放多个对象,多个记录。
        * 案例1:输出emp表中所有员工的姓名

declare
  cursor c1 is select * from emp;
  emprow emp%rowtype;
begin
  open c1;
    loop
      fetch c1 into emprow;
      exit when c1%notfound;
      dbms_output.put_line(emprow.ename);
    end loop;
  close c1;
end;

        * 案例2:给指定部门员工涨100块工资(带参数的游标)

declare
  cursor c2(eno emp.deptno%type) 
  is select empno from emp where deptno = eno;
  en emp.empno%type;
begin
  open c2(10);
    loop
      fetch c2 into en;
      exit when c2%notfound;
      update emp set sal=sal+100 where empno=en;
      commit;
    end loop;
  close c2;
end;

 

 

谢谢观看!

 

posted @ 2019-11-30 11:22  the_path_of_grace  阅读(507)  评论(0编辑  收藏  举报