pl/sql代码块

PL/SQL代码块包括3个部分
声明(Declaration) 可执行命令(Executeable Command) 异常处理(Exception Hading)   

典型结构
     declare
      begin
      exception
      end;

声明部分以declare关键字开始,后面是变量和游标的定义列表。用户可以定义具有
常量值的变量,并且变量可以继承已存在的列和查询结果中的数据类型。
declare
      pi constant NUMBER(9,7):=3.14;
   radius integer(5);
   area number(14,2);
begin
      radius:=3;
       area:=pi*power(radius,2);
      insert into AREAS values(radius,area);
end;
/ ‘

end行是pl/sql块的结尾标志。根据所使用的工具,可能需要添加/来执行。
通过constant关键字来设置一个常量值。用:=运算符赋值
或者 pi constant number(9,7):=3.1515;
    pi constant number(9,7) default 3.1515;

declare
  pi constant number(9,7):=3.1415;
  area number(14,2);
  cursor rad_cursor is
     select * from RADIUS_VALS;
      rad_val rad_cursor%ROWTYPE;
  begin  open rad_cursor;
          fetch rad_cursor into rad_val;
    area:=pi*power(rad_val.radius,2);
    insert into AREAS values(rad_val.radius,area);
      close rad_cursor;
end;
/

定义了一个名为rad_cursor的游标,该游标的定义包括一个游标名称(rad_cursor)和
一个查询(select * from RADIUS_VALS)。
游标保存了再pl/sql块中其他命令执行的查询结果
最后声明创建一个变量,并通过游标的结果集设定其结果。
rad_val 变量可以引用该查询的结果集的每一列。在此示例中查询只返回一列。 但如果改表包括多了
可通过rad_val变量引用他们。
除了%rowtype声明外,还可以用%type声明继承数据类型信息。如果使用%rowtype声明,那么该变量
将使游标的结果集中的所有列和相应的数据类型信息。如果使用%type声明。则变量之能继承用于定义它的列的定义。
甚至能够在游标中使用%type定义。
cursor rad_cursor is select * from RADIUS_VALS;
   rad_val rad_cursor%rowtype;
   rad_val_radius ral_val.Radius%type;

可执行命令部分总是以关键字begin 开头。
    在涉及游标的第一个命令中,使用open命令。
 open rad_cursor; 当打开rad_cursor游标时,执行声明改游标的查询,并且是不将要返回的记录。
 接着从游标中取出记录。
 fetch rad_cursor into rad_val;
 从游标中取出记录并放到rad_val变量时,扔能访问通过游标的查询选择的每一列的值。当不需要游标的数据时,
 可以关闭游标
 close rad_cursor;

pl/sql块中可以使用的逻辑
 if  then
    else if  then
    else
     end if;

循环  简单循环:知道循环中遇到exit 或exit when语句时,才跳出循环
      For 循环  指定循环次数的循环
      while循环  在满足某个条件时循环。
 declare
        pi constant number(9,7):= 3.1415;
  radius integer(5);
  area number(14,2);
 begin
      radius:=3;
   loop
      area:=pi*power(radius,2);
     insert into AREAS values(radius,area);
     radius:=radius+1;
  exit when area>100;
  end loop;
 end;

简单的游标循环
       可以使用游标的属性(如是否还有课取出的行等)作为推出循环的条件
 游标执行到查询不在返回任何行时,要确定游标的状态,就需要检查游标的属性
游标有四个可以再程序中使用的属性。
 %found 可从游标中取出1条记录
 %notfound 不能从游标中再取到记录
 %isopen 游标已经打开
 %rowcount 迄今为止从游标中取出的行数。
 %found,%notfound,%isopen属性是布尔型。
 所以可以 exit when rad_cursor%notfound;

  for循环
    在简单循环中,当满足exit条件时循环结束,而在for循环中,循环执行指定的次数。
 for循环由关键字for指定,后面是用来决定循环过程合适完成以及循环何时退出的条件。由于循环
 执行的次数在循环开始时设置 因此在循环中不在需要exit命令。
 列子。
 declare
     pi constant number(7,2):=3.1415;
  area number(14,2);
  radius integer(5);
  begin
     for radius in 1..4 loop
      area:=pi*power(radius,2);
   insert into AREAS values(radius,area);
   end loop;
   end;
 游标for循环。
    在for 循环中,循环执行指定的次数,而在游标for循环中,循环执行的次数由查询的结果动态决定。
    在游标for循环中,打开游标,取出游标,和关闭游标隐式完成。不需要显式指定这些操作。
    declare
        pi constant number(9,7):=3.1415;
     area number(14,2);
     cursor rad_cursor is select * from RADIUS_VALS;
  begin
     for rad_val in rad_cursor
       loop
       area:=pi*power(rad_val.radius,2);
    insert into AREAS values(rad_val.radius,area);
     end loop;
  end;

隐式的打开rad_cursor游标,并将取出的值放入rad_val变量中。当该游标中没有记录时,
  退出循环,游标关闭。在游标for循环中,不需要close命令。 注意rad_val没有在块中显式
  的声明。
  
         while循环。
      直到满足退出条件。while循环才会结束。在此种循环中,不再用exit命令指定退出循环的条件。
   而是在循环的开始用while命令指定退出循环的条件。
  declare
        pi constant number(9,7):=3.1415;
     area number(14,2);
     cursor rad_cursor is select * from RADIUS_VALS;
  begin
      radius:=3;
   while radius<=7
              loop
     area:=pi*power(radius,2);
      insert into AREAS values(radius,area);
      radius:=radius+1;
      end loop;
  end;

除了函数,数据库中还可以存储以下类型的PL/SQL代码块: 1. 存储过程(Stored Procedure):存储过程是一段被命名的PL/SQL代码块,可以在数据库中进行存储和重复调用。它可以接受参数并执行一系列的SQL语句和逻辑操作,常用于实现复杂的业务逻辑。 2. 触发器(Trigger):触发器是一种特殊类型的存储过程,它与数据库中的表相关联,并在特定事件发生或特定条件满足时自动触发执行。例如,在插入、更新或删除表中的数据时触发器可以执行相应的操作。 3. 包(Package):包是一种将相关的PL/SQL对象(如函数、过程、变量等)封装在一起的容器。它提供了更结构化的组织方式,使得代码更易于维护和重用。包可以包含包头和包体两部分,包头声明了包的接口,而包体定义了具体的实现。 4. 类型(Type):类型是一种用户定义的数据结构,可以用于创建自定义数据类型。在PL/SQL中,可以定义记录类型、表类型和对象类型等。类型可以作为参数、变量或返回值在PL/SQL代码中使用。 5. 异常处理程序(Exception Handler):异常处理程序是一段用于捕获和处理异常的PL/SQL代码块。它可以在程序执行过程中检测到异常,并根据需要执行相应的错误处理逻辑。 以上是数据库中可以存储的除函数外的其他类型的PL/SQL代码块。它们都可以在数据库中进行定义、存储和调用,用于实现不同的业务逻辑和数据处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值