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