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

[经验分享] Oracle PL/SQL 学习笔记01

[复制链接]

尚未签到

发表于 2016-7-30 19:05:47 | 显示全部楼层 |阅读模式
  第一章 PL/SQL介绍
  
  1.为什么使用PL/SQL
  
  PL/SQL和SQL结合紧密,二者使用相同的数据类型。PL/SQL使用更少的代码并具有更快的执行速度
  PL/SQL简化了应用程序的逻辑到数据库层的转移,可以增加代码重用(code reusable)和减少网络通信(network traffic),同时由于代码采用原声编译(natively compiled),从而获得了更快的执行速度
  PL/SQL可以轻松的实现跨平台(由于Oracle数据库可以跨平台)
  
  2.PL/SQL不适用的场景
  
  当代码需要在不同的数据库系统运行,如使用DB2,Sybase等数据库产品,PL/SQL显然不是一个很好的选择(Java is better)
  当终端用户需要直接调用接口时,尽量避免使用PL/SQL
  
  3.PL/SQL的基本结构
  
  PL/SQL是块结构的语言
  
  一个典型的PL/SQL块应该包含一个声明部分,一个可执行部分和一个异常处理部分
  
  声明部分是可选的,可执行部分必须介于Begin语句和End语句之间,以英文半角分号结束,异常处理部分也是可选的,但强烈建议使用异常处理
  

declare
v_rate    NUMBER;
v_threshould    NUMBER := 100.00;
v_increase_flag    BOOLEAN := false;
begin
select rate into v_rate from rate_table
where rate_type = 'Monthly'
and effective_date = trunc(sysdate);
if(v_rate < v_threshould) then
v_increase_flag := true;
end if;
if(v_inscrease_flag) then
update rate_table set rate := rate + 2.5 * rate
where rate_type = 'Monthly'
and effective_date = trunc(sysdate);
commit;      
end if;
exception when no_data_found then
dbms_output.put_line('Rate is not available');
when others then
dbms_output.put_line('Server error');
dbms_output.put_line(sqlerrm);
end;
/
  
  上面为一个PL/SQL最基本的程序结构,这个PL/SQL块同时可以嵌入到存储过程中
  

create or replcae procedure p_process_rate(
ip_rate_type         in     rate_table.rate_type%type,
ip_effective_date  in     rate_table.effective_date%type,
ip_threshould        in     number,
op_rate                 out   number,
op_success           out   varchar2,
op_errmsg            out   varchar2)
is
v_rate number;
v_increase_flag boolean := false;
begin
select rate into v_rate from rate_table
where rate_type = ip_rate_type
and effective_date = ip_effective_date;
if(v_rate < ip_threshould) then
v_increase_flag := true;
end if;
if(v_increase_flag) then
update rate_table set rate := rate + 2.5 * rate
where rate_type = ip_rate_type
and effective_date = ip_effective_date
returning rate into v_rate;
commit;
end if;
op_rate := v_rate;
op_success := 'Y';
exception when no_data_found then
op_rate := null;
op_success := 'N';
op_errmsg := 'Rate is not availabe ';
when others then
op_rate := null;
op_success := 'N';
op_errmsg := 'Server error' || chr(10) || chr(13) || SQLERRM;
end;
/
  
  其中in表示输入参数,out表示输出参数
  
  

declare
v_rate number;
v_success_flag varchar2(1);
v_errmsg varchar2(1000);
begin
p_process_rate('Monthly',trunc(sysdate), 100.00,        
v_rate, v_success_flag, v_errmsg);
if(v_success_flag != 'Y') then
dbms_output.put_line('Procedure p_process_rate failed with error(s) as follows');
dbms_output.put_line(v_errmsg);
end if;
end;
/
  
  上述代码调用了存储过程p_process_rate
  

运维网声明 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.yunweiku.com/thread-251381-1-1.html 上篇帖子: oracle中用sql时间相减的问题 下篇帖子: oracle 学习笔记_外连接查询详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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