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;

 

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;

 

 

  ---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;

 

   ---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;

 4.异常处理

   预定义异常

exception
 when too_many_rows then                          
  dbms_output.put_line('返回记录超过一行');
 when no_data_found then                         
  dbms_output.put_line('无数据记录');

自定义异常

declare
v_price info.price%TYPE;
primary_iterant exception;  --定义一个异常变量
pragma exception_init(primary_iterant,-00001);  --关联错误号和异常变量名
begin
 select price into v_price from info where id = 1;
     if v_price < 1 then 
        raise primary_iterant;
     end if;
exception
 when primary_iterant then
  dbms_output.put_line('价格不能小于1!');
end;

 

5函数编写(商品数量低于50 的打75折,高于50的打9折)

create or replace function pric     --or replace 覆盖同名函数
(v_pric in number,v_qnty in number)
return number     --函数的返回类型
is
begin
  if v_qnty<50 then
    return(v_pric *0.75);
    else
      return(v_pric*0.9);
   end if;
 end;

调用方法

1
declare 
avgl number;
begin
  avgl:=pric(100,40);
    dbms_output.put_line(avgl);
 end;
2 select pric(100,40) from tab;
--删除函数
drop function get_avg_pay;

 查看函数

col name format a15              --格式化字段长度
col text   format a80
select name,line,text from user_source where name ='pric';

 

转载于:https://www.cnblogs.com/Soper/p/10292147.html

weixin028基于微信小程序小说阅读器设计+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值