设为首页 收藏本站
查看: 835|回复: 0

[经验分享] Oracle-day04 上

[复制链接]

尚未签到

发表于 2018-9-5 10:39:50 | 显示全部楼层 |阅读模式
  一、PL/SQL
  (一)什么是 PL/SQL
  PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。
  基本语法结构
  

[declare  
--声明变量
  
begin
  
--代码逻辑
  
[exception
  
--异常处理
  
end;
  

  (二)变量
  声明变量的语法:
  

  
变量名 类型(长度);
  

  变量赋值的语法:
  变量名:=变量值
  变量的声明
  需求:
  声明变量水费单价、水费字数、吨数、金额。
  对水费单价、字数、进行赋值 。吨数根据水费字数换算,规则为水费字数除以
  1000,并且四舍五入,保留两位小数。计算金额,金额=单价*吨数。
  输出单价 、数量和金额。
  --变量的用法--
  

declare  
v_price number(10,2);--水费单价
  
v_usenum number;
  
--水费字数
  
v_usenum2 number(10,2);--吨数
  
v_money number(10,2);--金额
  
begin
  
v_price:=2.45;--水费单价
  
v_usenum:=8012;--字数
  
--字数换算为吨数
  
v_usenum2:= round( v_usenum/1000,2);
  
--计算金额
  
v_money:=round(v_price*v_usenum2,2);
  
dbms_output.put_line('单价:'||v_price||'吨
  
数:'||v_usenum2||'金额:'||v_money);
  
end;
  

  Select into 方式 赋值
  语法结构:
  select 列名 into 变量名 from 表名 where 条件
  注意:结果必须是一条记录 ,有多条记录和没有记录都会报错
  

declare  
v_price number(10,2);--单价
  
v_usenum number;--水费字数
  
v_num0 number;--上月字数
  
v_num1 number;--本月字数
  
v_usenum2 number(10,2);--使用吨数
  
v_money number(10,2);--水费金额
  
begin
  
--对单价进行赋值
  
v_price:=3.45;
  
--变量赋值
  
select usenum,num0,num1 into v_usenum,V_num0,V_num1 from
  
T_ACCOUNT
  
where year='2012' and month='01' and owneruuid=1;
  
v_usenum2:= round(v_usenum/1000,2);
  
v_money:=v_price*v_usenum2;
  
DBMS_OUTPUT.put_line('单价:'||v_price||'吨数:'
  
||v_usenum2||'金额:'||v_money||'上月字数:'||v_num0||'本月
  
字数'||v_num1);
  
end;
  

  (三)属性类型
  %TYPE 引用型
  作用:引用某表某列的字段类型
  

declare  
v_price number(10,2);--单价
  
v_usenum T_ACCOUNT.USENUM%TYPE;--水费字数
  
v_num0 T_ACCOUNT.NUM0%TYPE;--上月字数
  
v_num1 T_ACCOUNT.NUM1%TYPE;--本月字数
  
v_usenum2 number(10,2);--使用吨数
  
v_money number(10,2);--水费金额
  
begin
  
--对单价进行赋值
  
v_price:=3.45;
  
--v_usenum:=8090;
  
select usenum,num0,num1 into v_usenum,V_num0,V_num1 from
  
T_ACCOUNT
  
where year='2012' and month='01' and owneruuid=1;
  
--使用吨数
  
v_usenum2:= round(v_usenum/1000,2);
  
--计算金额
  
v_money:=v_price*v_usenum2;
  
DBMS_OUTPUT.put_line('单价:'||v_price||'吨数:'
  
||v_usenum2||'金额:'||v_money||'上月字数:'||v_num0||'本月
  
字数'||v_num1);
  
end;
  

  %ROWTYPE
  记录型 ,上例中的例子可以用下面的代码代替
  作用: 标识某个表的行记录类型
  --变量的用法--
  

declare  
v_price number(10,2);--单价
  
v_account T_ACCOUNT%ROWTYPE;--记录型
  
v_usenum2 number(10,2);--使用吨数
  
v_money number(10,2);--水费金额
  
begin
  
--对单价进行赋值
  
v_price:=3.45;
  
--赋值
  
select * into v_account from T_ACCOUNT
  
where year='2012' and month='01' and owneruuid=1;
  
--使用吨数
  
v_usenum2:= round(v_account.usenum/1000,2);
  
--计算金额
  
v_money:=v_price*v_usenum2;
  
DBMS_OUTPUT.put_line('单价:'||v_price||'吨数:'
  
||v_usenum2||'金额:'||v_money||'上月字数:
  
'||v_account.num0||'本月字数'||v_account.num1);
  
end;
  

  (四)异常
  在运行程序时出现的错误叫做异常
  发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分
  异常有两种类型:
  预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式
  引发
  用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的
  异常通过 RAISE 语句显式引发
  预定义异常
  Oracle 预定义异常 21 个
DSC0000.jpg

  语法结构:
  

exception  
when 异常类型 then
  
异常处理逻辑
  

  根据上例中的代码,添加异常处理部分
  

--变量的用法--  
declare
  
v_price number(10,2);--水费单价
  
v_usenum T_ACCOUNT.USENUM%type; --水费字数
  
v_usenum2 number(10,3);--吨数
  
v_money number(10,2);--金额
  
begin
  
v_price:=2.45;--水费单价
  
select usenum into v_usenum from T_ACCOUNT where
  
owneruuid=1 and year='2012' and month='01';
  
--字数换算为吨数
  
v_usenum2:= round( v_usenum/1000,3);
  
--计算金额
  
v_money:=round(v_price*v_usenum2,2);
  
dbms_output.put_line('单价:'||v_price||'吨
  
数:'||v_usenum2||'金额:'||v_money);
  
exception
  
when NO_DATA_FOUND then
  
dbms_output.put_line('未找到数据,请核实');
  
when TOO_MANY_ROWS then
  

  
dbms_output.put_line('查询条件有误,返回多条信息,请核实');
  
end;
  

  (五)条件判断
  基本语法 1
  

if 条件 then  
业务逻辑
  
end if;
  

  基本语法 2
  

if 条件 then  
业务逻辑
  
else
  
业务逻辑
  
end if;
  

  基本语法 3
  

if 条件 then  
业务逻辑
  
elsif 条件 then
  
业务逻辑
  
else
  
业务逻辑
  
end if;
  

  需求:设置三个等级的水费 5 吨以下 2.45 元/吨 5 吨到 10 吨部分 3.45 元/吨 ,
  超过 10 吨部分 4.45 ,根据使用水费的量来计算阶梯水费。
  

declare  
v_price1 number(10,2);--不足 5 吨的单价
  
v_price2 number(10,2);--超过 5 吨不足 10 吨单价
  
v_price3 number(10,2);--超过 10 吨单价
  

  
v_account T_ACCOUNT%ROWTYPE;--记录型
  
v_usenum2 number(10,2);--使用吨数
  
v_money number(10,2);--水费金额
  
begin
  
--对单价进行赋值
  
v_price1:=2.45;
  
v_price2:=3.45;
  
v_price3:=4.45;
  
--赋值
  
select * into v_account from T_ACCOUNT
  
where year='2012' and month='01' and owneruuid=1;
  
--使用吨数
  
v_usenum2:= round(v_account.usenum/1000,2);
  
--计算金额(阶梯水费)
  
if v_usenum25 and v_usenum2

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563478-1-1.html 上篇帖子: Oracle执行计划之历史回归 下篇帖子: Oracle-day04 中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表