Oracle数据库的PLSQL

Posted Code_exploration

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库的PLSQL相关的知识,希望对你有一定的参考价值。

 

PLSQL

 

 

  一:plsql是procedural language sql:过程化sql语言,是oracle数据库中可以实现一些复杂的计算和功能。

  其实是在基本的sql语言中,加入了循环。判断等逻辑的一种数据库编程方式,运行在oracle数据库上。

  二:作用

    更高效率的的进行大数据量的运算。

  三:优缺点

    优点:效率高

    缺点:编写与维护性低,开发测试效率低,非面向对象语言。

  四:格式

    基本格式:

      declare

        --变量的声明区域

      最简格式:

      /

      begin

        业务逻辑区域

        --exception

      end

      /

    说明:变量的声明

        变量名 类型名:=值;

        不赋值时,变量的默认值为null,作运算时,null与任何值运行的结果都是null。

        ==表示判断是否相等

        */*必须要存在

        plsql只是一个定义好的匿名代码块,只能在oracle数据库中编译和运行一次,不会存储在oracle中,如果存储,需要定义成存储过程,函数,触发器。

  五:练习

    -->使用最简格式,输出打印"Hello plsql"。

    set serveroutput on;  --开启输出功能

    begin

      dbms_output.put_line(‘Hello plsql‘);

    end;

    /

    -->显示  姓名  年龄  出生年月日

      begin

        dbms_output.put_line(‘lyr‘);

        dbms_output.put_line(‘20‘);

        dbms_output.put_line(‘1997-3-6‘);

      end;

      /

  六:plsql的使用

    1.-->注释,--单行注释,/*.....*/多行注释。

    2.

      declare

        变量名 类型

        变量名 类型:=值;

      begin

      end;

        /

  七:练习

    -->定义一个a,b,c,a=5,b=6,c=a+b,输出c的值。

    declare

      a number:=5;

      b number:=6;

      c number;

    begin

      c:=a+b;

      dbms_output.put_line(c)

    end;

     /    

    -->定义变量name,age,赋值输出。

    declare

      name varchar2(20);

      age number(2);

    begin

      name:=‘lyr‘;

      age:=20;

      dbms_output.put_line(‘name=‘||name||‘ age=‘||age);

    end;

     /

    

判断

 

 

  1:基本格式

    if 条件 then

      ..

    elsif 条件 then

      ..

    else

      ..

    end if;

  2:练习

    -->定义一个变量gender 赋值,如果为‘M‘,输出男,如果为‘F‘,输出女,否则输出性别不详。  

    declare

      gender varchar(20);

    begin

      gender:=‘M‘;  

      if gender=‘M‘ then

        dbms_output.put_line(‘男‘);

      elsif gender=‘F‘ then

        dbms_output.put_line(‘女‘);

      else

        dbms_output.put_line(‘性别不详‘);

      end if;

    end;

     /

 

loop循环

 

 

  1:基本格式

    loop

      循环内容

      exit when 结束条件;  

    end loop;

  2:练习

    -->输出1-10。

    declare  

      i number:=1;

    begin

      loop 

        dbms_output.put_line(i);

        i:=i+1;

        exit when i>10;

      end loop;

    end;

     /

 

while循环

 

 

  1:基本格式

    while 条件 loop

      业务逻辑

      循环变量改变

    end loop;

  2:练习

   -->使用while循环计算100以内奇数的和。

      declare

        i number:=1;

        s number:=0;

      begin

        while i<101

          loop

            s:=s+i;

            i:=i+2;

          end loop;

        dbms_output.put_line(s);

      end;

       /

 

for循环

 

 

  1:基本格式

    for 变量 in 集合 loop

    end loop

    说明:集合必须是数字集合,1..10表示1~10的整数。

  2:练习

    -->使用for循环输出1-10。

    begin

      for i in 1..10

        loop

          dbms_output.put_line(i);

        end loop;

      end;

       /

PLSQL使用DML和TCL

    

  1:没有特殊情况,直接使用。

  2:练习

    --> 对表dept,增加一条数据 100,‘qqq‘,‘cc‘,修改40号部门的地址为南关。

      begin

        insert into dept values(100,‘qqq‘,‘cc‘);

        update dept set loc=‘南关‘ where deptno=40;

      end;

      /

 

PLSQL使用DQL

 

 

  1:说明

    plsql中使用DQL语言,不只是为了查询,因为如果查询的话,普通的sql语句比较方便,而plsql中使用DQL目的是将查询的数据封装到变量中,进行其他的逻辑运算。

    --返回单行数据

      select colName1,colName2 into 变量1,变量2 from ....

  2:练习

    查询10号部门的名称和地址封装到变量a和b进行拼接输出。

    declare

      a varchar2(20);

      b varchar2(20);

    begin

      select dname,loc into a,b from dept where deptno=10;

      dbms_output.put_line(a||‘  ‘||b);

    end;

    /

    --返回多行数据

      1:使用游标

        会将多条数据封装到游标中,相当于java的ResultSet。

        游标默认会在第一行,每fetch一次,游标就会向下行移动,当成功移到下一行时,游标就有一个状态:found,当游标移到最后一行时,再次fetch时,不会移动,但是状态变为not found。

    2:格式

      declare

        cursor 游标名 is select 语句....;

        变量 类型

      begin  

        open 游标名;

          loop

            fetch 游标名 into 变量1,变量2...

            exit when 结束条件(游标民%not found)

          end loop;

        close 游标名;

       end;

        /

    3:练习

      -->输出显示10号部门的员工姓名,职位,工资。

      declare

        cursor c is select ename,job,sal from emp where deptno=10;

        na varchar2(20);

        j varchar2(20);

        sal number(20);

      begin

        open c;

        fetch c into na,j,sal;

        while (c%found) 

          loop

            dbms_output.put_line(na||‘ ‘||j||‘ ‘||sal);

            fetch c into na,j,sal;

          end loop;

        close c;

      end;

       /

 

 

技术分享图片
--自己练习:
set serveroutput on;
declare 
begin
  dbms_output.put_line(dsada);
end;
/

declare 
  a number;
  b number;
  c number;
begin
  a:=1;
  b:=2;
  c:=a+b;
  dbms_output.put_line(c);
end;
/

declare
  i number;
  j number;
begin
  i:=&请输入一个数字;
  j:=&请输入一个数字;
  dbms_output.put_line(i+j);
end;
/

declare
  a number;
  b number;
begin
  a:=&请输入一个数字;
  b:=&请输入一个数字;
  if a>b then
    dbms_output.put_line(a>b);
  elsif a<b then
    dbms_output.put_line(a<b);
  else
    dbms_output.put_line(a=b);
  end if;
end;
/

declare
  i number;
  n number;
begin
  i:=1;
  n:=&请输入一个数字;
  loop 
    dbms_output.put_line(i);
    i:=i+1;
    exit when i>n;
  end loop;
  
end;
/


declare
  i number;
  n number;
  s number;
begin
  i:=1;
  n:=&请输入最大值N;
  s:=0;
  loop 
    s:=s+i;
    i:=i+1;
    exit when i>n;
  end loop;
  dbms_output.put_line(s);
end;
/

declare
  n number;
  i number;
begin
  i:=1;
  n:=&请输入上限;
  while i<n loop
    dbms_output.put_line(i);
    i:=i+1;
  end loop;
end;
/

declare 
  i number;
  n number;
begin
  i:=0;
  n:=&请输入一个数字;
  for i in 1..n loop
    dbms_output.put_line(i);
  end loop;
end;
/

begin
  insert into dept values(90,qqq,cc);
  update dept set loc = dasda;
  rollback;
end;
/
select * from dept;


declare
  a varchar2(20);
  b varchar2(20);
begin
  select dname,loc into a,b from dept where deptno =10;
  dbms_output.put_line(a||  ||b);
end;
/

declare
  a dept.dname%type;
  b dept.loc%type;
begin
  select dname,loc into a,b from dept where deptno=10;
  dbms_output.put_line(a|| ||b);
end;
/

declare
  cursor c is select ename,sal,empno from emp where deptno=10;
  na varchar2(20);
  sa number(20);
  emp number(20);
begin
  open c;
  fetch c into na,sa,emp;
    while (c%found) loop
      dbms_output.put_line(na|| ||sa|| ||emp);
      fetch c into na,sa,emp;
    end loop;
  close c;
end;
/


declare
  cursor c is select ename,job,sal from emp where deptno=10;
  na varchar2(50);
  j varchar2(50);
  sal number(10);
begin
  open c;
   fetch c into na,j,sal;
    while(c%found) loop
      dbms_output.put_line(na|| ||j|| ||sal);
      fetch c into na,j,sal;
    end loop;
  close c;
end;
/

declare 
  cursor c is select ename,sal,mgr from emp;
  name varchar2(74);
  sal number;
  mgr number;
begin
  open c;
  fetch c into name,sal,mgr;
  while c%found loop
    dbms_output.put_line(name|| ||sal|| ||mgr);
    fetch c into name,sal,mgr;
  end loop;
  close c;
end;
/

declare
  cursor c is select deptno from dept;
  d number;
begin
  open c;
  fetch c into d;
  loop 
    dbms_output.put_line(d);
    fetch c into d;
    exit when c%notfound;
  end loop;
end;
/

declare 
  cursor c is select ename from emp;zz  name varchar2(50);;
begin
  open c;
  dbms_output.put_line(c%notfound);
  fetch c into name;
  while c%found loop
    dbms_output.put_line(name);
    fetch c into name;
  end loop;
  close c;
end;
/
练习

 

 

 

  

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---










以上是关于Oracle数据库的PLSQL的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库,大型plsql代码管理

在 Oracle PLSQL 函数的输出过程中出现逗号问题

怎样用plsql 简单连接oracle32位客户端

oracle中plsql与sqlplus的区别是啥啊?它们分别用来做啥啊?

oracle 中plsql 怎样写更新一行的语句(高手请进)

oracle中plsql的使用