PLSQL练习(小试牛刀)

-- todo 1.1 练习
-- 题目: 小王在超市购买
-- 苹果 5斤 6元/斤
-- 香蕉 2斤 10元/斤

-- 请以plsql完成 完整显示如下
-- 苹果-5斤-6元/斤
-- 香蕉-2斤-10元/斤
-- 总金额: 50元

declare
    namePG varchar2(20);
    nameXJ varchar2(20);
    moneyPG number(10);
    moneyXJ number(10);
    kilogrammePG number(10);
    kilogrammeXJ number(10);
    totalprice number(10);
begin
    namePG:='苹果';
    nameXJ:='香蕉';
    moneyPG:=6;
    moneyXJ:=10;
    kilogrammePG:=5;
    kilogrammeXJ:=2;
    totalprice:=moneyXJ*kilogrammeXJ+moneyPG*kilogrammePG;

    DBMS_OUTPUT.PUT_LINE(namePG||'-'||kilogrammePG||'斤-'||moneyPG||'元/斤');
    DBMS_OUTPUT.PUT_LINE(nameXJ||'-'||kilogrammeXJ||'斤-'||moneyXJ||'元/斤');
    DBMS_OUTPUT.PUT_LINE('总金额:'||totalprice||'元');
end;

-- todo 2.1 练习
-- 从t_area表中获取获取区域数量并显示
-- 1. my_count存储区域数量
-- 2. 最终展示效果如下
--    区域数量: 6

declare
    mycount number(10);
    begin
    select count(*)into mycount from T_AREA;
    DBMS_OUTPUT.PUT_LINE('区域数量:' || mycount);
end;

-- todo 3.1 目标: 使用判断if计算阶梯水费
-- todo 业务: 设置三个等级的水费
--  5 吨以下           2.45  元/吨,
--  5 吨到 10 吨部分   3.45  元/吨,
--  超过 10 吨部分     4.45  元/吨,
--  根据使用水费的量来计算阶梯水费。

declare
    p05 number(10,2);
    p510 number(10,2);
    p10  number(10,2);
    v_account t_account%rowtype ;
    ton number(10,2);
    totalmoney number(20,2);
begin
    p05:=2.45;
    p510:=3.45;
    p10:=4.45;
    select * into v_account from T_ACCOUNT where id='02';
    ton:=round(v_account.USENUM/1000,2);
    if ton<5 then totalmoney:=ton*p05;
    elsif ton>5 and ton <10 then totalmoney:=(5*p05)+(ton-5)*p510;
    else  totalmoney:=(5*p05)+(5*p510)+(ton-10)*p10;
    end if;
    DBMS_OUTPUT.PUT_LINE('金额:'||totalmoney);
end;

 -- todo 4.1 循环

-- 使用 loop 输出 1 ~ 100

declare
  total number;
begin
    total:=1;
    loop
        DBMS_OUTPUT.PUT_LINE('数:!!!!!!'||total);
        total:=total+1;
        exit when total>100;
    end loop;
end;

 -- todo 5.1 while循环

-- 使用 while 输出 1 ~ 100中的奇数和偶数的和

declare
-- --     赋值 total 从一开始
    total number :=0;
    sumou number :=0;
    sumji number :=0;
      begin
-- --     先写while条件
     while total<100
-- --     在loop循环中,写要干嘛,再输出
    loop
      total:=total+1;
       if mod(total,2)=0 then
           sumou:=sumou+total;
           DBMS_OUTPUT.PUT_LINE('偶数和:'||sumou);
       elsif mod(total,2)=1 then
           sumji:=sumji+total ;
           DBMS_OUTPUT.PUT_LINE('奇数和:'||sumji);
       else DBMS_OUTPUT.PUT_LINE('无');
       end if;
     end loop ;
 end;

-- todo 6.1 练习
-- 使用 for 输出 1 ~ 100

declare

    begin
    for total in 1..100
    loop
DBMS_OUTPUT.PUT_LINE('数'||total);
        end loop;
end;

-- todo 7.1 练习
-- 使用 for 输出 1 ~ 100之间的偶数

declare
    begin
for total in 1..100
  loop
        if
            mod(total,2)=0 then
DBMS_OUTPUT.PUT_LINE('数'||total);
end if;
        end loop;
end;

 -- todo 8.1 需求:打印业主类型为 1 的价格表

显示如下 -- 价格: 2.45, 吨位: 0--5 -- 价格: 3.45, 吨位: 5--10 -- 价格: 4.45, 吨位: 10--

declare
--   行变量
    pricetable T_PRICETABLE%rowtype;
--   创建游标
    cursor c1 is select * from T_PRICETABLE where OWNERTYPEID='01';
    begin
--  打开游标
    open c1;
--  进入循环
loop
--把行变量里数据插入游标中
    fetch c1 into pricetable;
-- 判断结束条件
exit when c1%notfound;
-- 直接输出
DBMS_OUTPUT.PUT_LINE('吨位:'||pricetable.MINNUM||'--'||pricetable.MAXNUM ||',价格:'||pricetable.PRICE);
end loop;
close c1;
end;

 -- todo 9.1带形参的游标

declare
--   行变量
    pricetable T_PRICETABLE%rowtype;
--   创建游标
    cursor c1 (type number) is
        select * from T_PRICETABLE where OWNERTYPEID=type;
    begin
--  打开游标
    open c1(1);
--  进入循环
loop
--把行变量里数据插入游标中
    fetch c1 into pricetable;
-- 判断结束条件
exit when c1%notfound;
-- 直接输出
DBMS_OUTPUT.PUT_LINE('吨位:'||pricetable.MINNUM||'--'||pricetable.MAXNUM ||',价格:'||pricetable.PRICE);
end loop;
close c1;
open c1(2);
    --  进入循环
loop
--把行变量里数据插入游标中
    fetch c1 into pricetable;
-- 判断结束条件
exit when c1%notfound;
-- 直接输出
DBMS_OUTPUT.PUT_LINE('吨位:'||pricetable.MINNUM||'--'||pricetable.MAXNUM ||',价格:'||pricetable.PRICE);
end loop;
close c1;
end;

-- todo 10.1游标的简化使用

declare
-- 创建游标
    cursor c1 (canshu number)is
    select * from T_PRICETABLE where T_PRICETABLE.OWNERTYPEID=canshu;
begin
--     直接循环
for i in c1(1) loop
DBMS_OUTPUT.PUT_LINE('价格:'||i.PRICE||', 吨位:'||i.MINNUM||'--'||i.MAXNUM);
end loop;
for i in c1(2) loop
DBMS_OUTPUT.PUT_LINE('价格:'||i.PRICE||', 吨位:'||i.MINNUM||'--'||i.MAXNUM);
end loop;
for i in c1(3) loop
DBMS_OUTPUT.PUT_LINE('价格:'||i.PRICE||', 吨位:'||i.MINNUM||'--'||i.MAXNUM);
end loop;
end;

  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值