PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。MySQL 也支持 PL/SQL 的,但支持Navicat Premium。

一、组成:

1、定义部分:

  定义一些常量、变量等;

2、执行部分:(必须存在)

  包含要执行的sql语句;

3、异常处理部分:

  捕获异常(可能出现的运行错误,并编写出错后的代码)。



declare
 --变量声明部分
begin
 --执行部分
exception
 --异常处理部分
End



二、调试:

使用set serveroutput on 命令设置环境变量;
serveroutput为打开状态,从而使得pl/sql程序能够在SQL*plus中输出结果。
在编写存储过程时,有时会用
dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。

三、变量的定义:(类似java里面的匿名方法)

1、格式:

变量名 变量类型(oracle里面数据类型) [约束] default 默认值

变量名 变量类型 [约束] [:=初始值]

2、



SQL> declare
  2    i number default 10;
  3  begin
  4    i:=i+10;
  5    dbms_output.put_line(i);
  6  end;
  7  /
20
PL/SQL procedure successfully completed



四、流程控制语句:

1、if语句:



if 条件 then
...
end if;



if 条件 then
...
else
...
end if;


if 条件 then
...
elsif 条件 then
...
end if;



SQL> declare
  2      age number default 90;
  3      height number := 175;
  4      gender char(4) := '男';
  5  begin
  6      if gender='男' then
  7          dbms_output.put_line('你可以和女性结婚');
  8      end if;
  9  
 10      if height>170 then
 11          dbms_output.put_line('可以打篮球');
 12      else
 13          dbms_output.put_line('可以踢足球');
 14      end if;
 15  
 16      if age<20 then
 17          dbms_output.put_line('年轻小伙');
 18      elsif age <= 50 then
 19          dbms_output.put_line('年轻有为');
 20      elsif age <=70 then
 21          dbms_output.put_line('安享天伦');
 22      else
 23          dbms_output.put_line('佩服佩服');
 24      end if;
 25  
 26  end;
 27  /
你可以和女性结婚
可以打篮球
佩服佩服
PL/SQL procedure successfully completed



 



 2、while循环:



while 条件 loop
循环体
end loop



3、for循环:



for 循环变量 in [reverse] 起始值..终止值 loop
    循环体
end loop



reverse 是倒序;注意起始值与终止值中间有两点

4、loop循环语句:



loop
--循环体
exit when 条件;
end loop;



SQL> declare
  2      i number :=0;
  3      total number :=0;
  4  begin
  5      loop
  6          i := i+1;
  7          total := total + i;
  8  
  9          exit when i>=100;
 10      end loop;
 11  
 12      dbms_output.put_line('总和'||total);
 13  
 14  end;
 15  /
总和5050
PL/SQL procedure successfully completed



四、存储过程创建语句:

存储过程就是有名字的plsql块!

procedure就是存储过程!



create or replace procedure 名称[(参数)]--此名称类似java里的方法名
authid current_user|definer --以定义者还是调用者的身份运行
is[不要加declare]
--变量声明部分
begin
--主体部分,封装起来,然后调用的时候才开始执行,类似于调用方法!!!
exception
--异常部分
end;



SQL> create procedure a2(width int,height int)
  2      is
  3      area int:=0;
  4      begin
  5      area:=width*height;
  6      dbms_output.put_line('area is'||area);
  7      end;
  8  /
Procedure created



--调用存储过程--有参的!
call a2(1,2);