PL/SQL简单学习


1.PL/SQL块的组成部分:


① 声明部分:该部分包含了变量和常量的定义,以及变量和常量的初始值定义,这部分由关键字declare开始,如果PL/SQL块中不需要声明变量或常量,该部分可以省略。


② 执行部分:执行部分是PL/SQL的执行指定部分,由关键字begin开始,关键字end结尾。

  所有可执行的SQL都放在这一部分,该部分不能省略,end关键字后面使用分号结尾。


③ 异常处理部分:该部分是可选的,该部分使用exception关键字将可执行部分分为两个部分,

  一部分是正常运行的程序,一旦出现异常就跳转到异常部分执行。





2.PL/SQL中符号的声明:


:= → 赋值运算符;


  --  → 单行注释;


  ..  → 范围操作符;eg.1..5 → 表示1到5


  ||  → 字符串连接 ;


  /* */  → 多行注释;    



② 算术运算符: + , - , * , /  ,  **(求幂运算,eg. 3**2=9)


③ 关系运算符: > , < , >=  , <=  , <>  , !=  


④ 逻辑运算符: and , or , not






3.变量的声明:

eg.

declare name nvarchar2(20) := 'hanchao';

-- nvarchar(20)→数据类型;name→变量名;‘hanchao'变量的默认值;

begin

       dbms_output.put_line(name);

-- 用于将变量输出到控制台上,如果没有输出可以通过set serveroutput on 设置输出。

end;

/ -- 用于执行上面的语句。





4.变量的赋值:

:=

select ... into 变量名 from ...

[注意事项:查询结果只能是一行,如果是多行或没有行,则会引发异常]

eg.

declare num1 int;

begin

 num1 := 10;

select 1 into num1 from dual;

 dbms_output.put_line(num1);

end;

/





5.声明常量:通过constant关键字来声明常量

declare pi constant float := 3.14;

r int := 4;

area float;

begin

    area := pi * r * r;

    dbms_output.put_line('area: ' || area);

end;

/    





6.特殊数据类型:


① %ROWTYPE : 该数据类型表示一条记录,相当于java中的一个对象,可以通过 “.”(点)操作符访问记录中的属性。

eg.

declare emprow emp%rowtype ;-- emp为表名

begin

   select * into emprow from emp where empno = 7934;

   dbms_output.put_line(emprow.ename);

end;

/    




②%TYPE : 引用某个变量或数据库的列作为数据类型来声明一个变量。

eg.

declare myname emp.ename%type; -- 以表emp的ename列为数据类型

begin

     select ename into myname from emp where empno = 7934;

     dbms_output.put_line(myname);

end;

/      





7.条件分支语句:

declare value1 number(10) := 10;

begin

      if value1 > 10 then

          dbms_output.put_line(' > 10');

      elsif value1 = 10 then

          dbms_output.put_line(' = 10 ');

       else

          dbms_output.put_line('< 10') ;

       end if;

end;

/                




8.循环结构

①loop ... end loop 循环

eg1.

declare temp number(3) := 0;

       total number(5) := 0;        

begin

 loop

       temp := temp + 1;

       total := total + temp;


      if temp >= 100 then

         exit;

       end if;

 end loop;

 dbms_output.put_line('total: ' || to_char(total));

end;

/


eg2.

declare temp number(3) := 0;

       total number(5) := 0;


begin

loop

   temp := temp + 1;

   total := total + temp;

  exit when temp >= 100;

 end loop;

 dbms_output.put_line('total : ' || to_char(total));

end;

/  



②while 循环

declare temp number(3) := 0;

       total number(5) := 0;


begin

  while temp < 100

    loop

      temp := temp + 1;

      total := total + temp;

    end loop;


   dbms_output.put_line('total : ' || to_char(total));

end;

/      





③for循环

declare temp number(3) := 0;

       total number(5) := 0;


begin

 for temp in 0..100

   loop

     total := total + temp;

   end loop;

dbms_output.put_line(' total : '|| to_char(total));

end;

/