PL/sql中如何声明变量,常量,控制语句及for,loop,while和顺序控制的使用

pl/sql

什么是PL/SQL

  PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言。使用PL/SQL可以编写具有很多高级功能的程序,有以下优点

  •  PL/SOL可以采用过程性语言控制程序的结构,也就是说,结构,如判断。循环等程序结构。
  •  同其他的编程语言一样,PL/SOL可以对程序中的错误进行自动处理,误时不会中断,即它的异常处理机制。
  •  PL/SOL程序块具有更好的可移植性,可以移植到另一个Cracle数据库中。
  •  PL/SOL程序减少了网络的交互,有助于提高程序性能。

常量和变量的声明与赋值

声明并赋值:

declare
/*
||注意命名规则
||名称不能超过30个字符
||第一个字符必须为字母
||不区分大小写
||不能用 减号
||不能是SQL保留字 
*/
--声明变量
  ename varchar2(20)
--声明常量 赋值是用 := 赋值 '='用于比较
  c_rate_incr constant number(7,2):=1.10
begin
end;

赋值:

--声明变量
  v_ename varchar2(20);
--声明常量并使用 :=赋值
  c_rate_incr constant number(7,2):=1.10;
begin
  --通过select in同给变量赋值
  select ename into v_ename from emp
  where empno='7788';
  Dbms_Output.put_line('变量:'||v_ename);
end;

结果

这种操作只能返回单行数据多了会报错

属性类型

使用%TYPE属性的优点在于:

  • 可以不必知道所引用的数据库列的数据类型。
  • 所引用的数据库列的数据类型可以实时改变, 容易保持一一致,不用修改PL/S0L 程序。

%ROWTYPE返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时可以使用%FOWTIFE,使用%ROWTYPE属性的优点在于:

  • 可以不必知道所引用的数据库中列的个数和数据类型。
  • 所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致不用修改PL/S0L 程序。

简单来讲 %type相当于一个普通的变量类型(字符或者数值),而%rowtype则是相当于集合可以保存多个变量信息

%type举例:

declare
--声明变量
  v_ename emp.ename%type;--声明常量并使用 :=赋值
  c_rate_incr constant number(7,2):=1.10;
begin
  --通过select in同给变量赋值
  select ename into v_ename from emp
  where empno='7788';
  Dbms_Output.put_line('变量:'||v_ename);
end;

结果

%rowtype举例:

declare
--声明变量
  v_ename emp%rowtype;
--声明常量并使用 :=赋值
  c_rate_incr constant number(7,2):=1.10;
begin
  --通过select in同给变量赋值
  select * into v_ename from emp
  where empno='7788';
  Dbms_Output.put_line('变量:'||v_ename.job||'--sal:'||v_ename.sal);
end;

结果

pl/sql中的控制语句

if控制语句

begin
  if 9>0 then
    Dbms_Output.put_line('9>0');
  else if 0>1 then
    Dbms_Output.put_line('0>1 ');     
  else
    Dbms_Output.put_line('9<0');
  end if;
end;

结果:

case语句

--case 也就是switch一样的功能
begin
  case 2
     when 1 then
        Dbms_Output.put_line('2是1');
     when 3 then
        Dbms_Output.put_line('2是3');
     else
        Dbms_Output.put_line('2是2');
     end case;
end;

结果:

loop循环

--loop
begin
  loop
    Dbms_Output.put_line('loop也就是do-while');
    exit when 9>0;
  end loop;
end;

结果:

for循环

--for
begin
 for i in 1..6 loop
   Dbms_Output.put_line('i:'||i);
 end loop;    
end;

结果:

while循环

--while
begin
  while 6>0 loop   
     Dbms_Output.put_line('6>0');
    exit;
   end loop;
end;
  • exit:跳出当前循环,使循环结束(相当与其他编程语言里面的break)
  • continue:结束本次循环,进入下一次循环
  • return:结束当前过程或者函数

顺序控制

  顺序控制用于按顺序执行语句.顺序语句包括null语句和goto语句goto不推荐使用

--顺序控制
begin
   if 6>0 then
     null;--为了使语法变得有意义,去掉null会报错
   else
      Dbms_Output.put_line('6>0');
   end if;
end;

  null语句是一个可执行语句,相当于一个占位符或不执行任何操作的空语句,它可以使得某些语句变得有意义,提高程序可读性,保证其他语句结构

的完整性和正确性.

begin
   if 6>0 then
     goto end_loop;--跳转到  <<end_loop>> 此标记是自定义 
   else
     null;
   end if;
   <<end_loop>>
   Dbms_Output.put_line('6>0');
end;
  • 标签<<end_loop>>后面接一条可执行的语句,不能直接跟END IF或者其他END;
  •  属于plsql控制语句,用于程序控制非条件跳至指定标签<<???>>。不易控制和维护,慎用!
原文地址:https://www.cnblogs.com/hfx123/p/9938949.html