pl/sql基础

结构化查询语言pls/ql的基本单位是块,结构由三部分组成,声明部分、执行部分和异常处理部分。

[declare]          ---声明部分,包括变量、常量、类型等
  begin            ---执行开始语言
     ---------     ---执行语句
   [exception]     ---异常处理部分
  end;             ---执行结束

 

例如: 表info(id,name,price)

declare   
 v_result   number(10,2);    
  begin                                        
     select id into v_result from info where name='饮料';   
     dbms_output.put_line('结果为:'||v_result);
   exception 
     when no_data_found then
       dbms_output.put_line('没有找到数据');
  end; 

 

1.定义变量与常量

    —type类型

declare  
  v_productid      info.id%type;    --%type声明变量,类型同表info.id的一致
  v_productname    varchar2(10);
  v_produceprice   number(10,2);
  v_desperation    constant v_productname%type :='测试'; --利用%type 引用v_productname的类型,并声明一个常量
  v_date           date :=sysdate;  
  begin                                       
     select id,name,price into v_productid,v_productname, v_produceprice
      from info where name='饮料'; 
      dbms_output.put_line('结果为:'||v_productid);
      dbms_output.put_line('结果为:'||v_productname);
      dbms_output.put_line('结果为:'||v_produceprice);
      dbms_output.put_line('结果为:'||v_desperation);
      dbms_output.put_line('结果为:'||v_date);
   exception 
     when no_data_found then
       dbms_output.put_line('没有找到数据');
  end;         
  

 

   —record类型

declare  
type product_rec is record          --记录类型的声明
(
  v_productid      info.id%type,   --%type声明变量,类型同表info.id的一致
  v_productname    varchar2(10),
  v_produceprice   number(10,2)
);
 v_product product_rec;
  begin                                       
     select id,name,price into v_product
      from info where name='饮料'; 
      dbms_output.put_line('结果为:'||v_product.v_productid);
      dbms_output.put_line('结果为:'||v_product.v_productname);
      dbms_output.put_line('结果为:'||v_product.v_produceprice);

   exception 
     when no_data_found then
       dbms_output.put_line('没有找到数据');
  end;         
  

 

  –%rowpyte

declare  
 v_product info%rowtype;
  begin                                       
     select * into v_product
      from info where name='饮料'; 
      dbms_output.put_line('结果为:'||v_product.id);
      dbms_output.put_line('结果为:'||v_product.name);
      dbms_output.put_line('结果为:'||v_product.price);

   exception 
     when no_data_found then
       dbms_output.put_line('没有找到数据');
  end;         
  

 

2.条件控制语句

    —if..else..  

declare  
  v_result number(10);
  begin                                       
     v_result :=1;
     if v_result>10 then
      dbms_output.put_line('大于10:'||v_result);
     elsif v_result=10 then
      dbms_output.put_line('等于10:'||v_result);
     elsif v_result<10 then
      dbms_output.put_line('小于10:'||v_result);
      end if;      
  end;         
  

 

    —case

declare  
  v_result number(10);
  begin                                       
     v_result :=1;
     case v_result
       when  '10' then
        dbms_output.put_line('等于10:'||v_result);
       when  '11' then
        dbms_output.put_line('等于11:'||v_result);
       when  '12' then
        dbms_output.put_line('等于12:'||v_result);
      else
        dbms_output.put_line('其他:'||v_result); 
        end case;    
  end;    

 

declare  
  v_result number(10);
  begin                                       
     v_result :=1;
     case 
       when v_result>10 then
        dbms_output.put_line('大于10:'||v_result);
       when v_result=10 then
        dbms_output.put_line('等于10:'||v_result);
       when v_result<10then
        dbms_output.put_line('小于10:'||v_result);
      else
        dbms_output.put_line('其他:'||v_result); 
        end case;    
  end;         
  

 

3.循环控制语句

   —loop

declare
v_num number(10):=1;
begin  
  <<basic_loop>>            --可以省略,结束时候直接 exit;
  loop
    dbms_output.put_line('结果是:'||v_num);
    v_num:=v_num+1;
    if v_num>100 then          --可以使用 exit basic_loop when v_num>10;
      exit basic_loop;
     end if;
  end loop;
end;

 

  —for

declare
sum_i int:=0;
begin
 for i in reverse 1..1000 loop -- reverse反向  表示i从100递减
  sum_i:= sum_i+i;
 end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);
end;

 

 

declare
sum_i int:=1;
i int:=1;
begin
 loop
  i:=i+1;
  sum_i :=sum_i +i;
 exit when i =100;
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);
end;

 

   —while

declare
sum_i int :=0;
i int :=0;
begin
 while i<1000 loop
  i:=i+1;
  sum_i:=sum_i+i;
 end loop;
 dbms_output.put_line('前100个自然数的和是:'||sum_i);
end;

 

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐