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

[经验分享] oracle学习笔记_3 PL-SQL基础

[复制链接]

尚未签到

发表于 2016-7-21 12:46:10 | 显示全部楼层 |阅读模式
  PL/SQL基础(oracle对sql语言的扩展,类似于java语言;前后端互动,后端想知道前端要查信息必须用参数方式捕捉,即用PL/SQL可解决)
  
  1.PL/SQL块结构(类似java类)
DECLARE  声明
...
BEGIN  开始
...
EXCEPTION  异常
...
END;  结束
/     执行
  ###dos下,设置服务器输出为打开: set SERVEROUTPUT ON SIZE 10000  (最大为100万)
###保存: save c:oracle\test1.txt
###执行: @ c:oracle\test1.txt
###编辑: deit c:oracle\test1.txt (不给路径默认执行缓冲区的)
###单字段赋值:select name INTO test from aaa where name='001';//其中INTO test是将查出来得结果集赋值于test变量,*只能一个字段数据。
###多字段赋值:select * INTO myrec from aaa where a='jun';//需要用多记录

  1.1变量声明内容
  * 赋予变量适当名称
  * 赋予变量正确数据类型
  * 定义变量(标准、记录)
  * 控制变量范围
  1.2命名规则
  * 变量由字符开头
  * 可以包括:数字、下划线、'$'、'#'等
  * 变量长度范围:1-30
  * 大小写不区分
  * 变量名不能是系统关键字select if for等
  
/********************1.3PL/SQL小例子***********************/
declare
x varchar2(100):='abcd';
begin
x:='hello oracle';
dbms_output.put_line('x的值为: '||x);
--dbms_output.put_line('x的值为: '||x);
end;
/
set SERVEROUTPUT ON SIZE 10000   (最大为100万)
  l
/
  保存: save c:oracle\test1.txt
执行: @ c:oracle\test1.txt
编辑: deit c:oracle\test1.txt (不给路径默认执行缓冲区的)

  ###注意:不区分大小写、赋值用':=' 、判断用'=' 、连接字符用'||' 、dbms_output包、行注释用'--' 、块注释用'/*sssss*/' 、执行用'\' 、显示缓冲区用'l'
        oracle也支持z integer:=230 和 str1 string(100):='hello' 和 num number:=25;
/********************1.3PL/SQL小例子***********************/
  
  2.分支语句(if-then分支、case分支)
/********************2.1PL/SQL小例子--if-then分支***********************/
declare
a number;
b varchar2(10);
begin
a:=2;
if a=1 then
b:='aaaa';
elsif a=2 then
b:='bbbb';
else
b:='cccc';
end if;
dbms_output.put_line('b的值为:'||b);
end;
/
/********************2.1PL/SQL小例子--if-then分支***********************/
  
  /********************2.2PL/SQL小例子--case分支***********************/
declare
a number;
b varchar2(10);
begin
a:=2;
case
when a=1 then b:='a';
when a=2 then b:='b';
when a=3 then b:='c';
else
b:='xxxx';
end case;
dbms_output.put_line('b的值为:'||b);
end;
/
/********************2.2PL/SQL小例子--case分支***********************/
  
  3.循环语句(loop、while-loop、for-loop、GOTO实现)
/********************3.1PL/SQL小例子--loop循环***********************/
declare
x number;
begin
x:=0;
loop
x:=x+1;
if x>=3 then
exit;
end if;
dbms_output.put_line('内: '||x);
end loop;
dbms_output.put_line('外: '||x);
end;
/
/********************3.1PL/SQL小例子--loop循环***********************/
  
  /********************3.2PL/SQL小例子--while-loop循环***********************/
declare
x number;
begin
x:=0;
while x<=3 loop
x:=x+1;
dbms_output.put_line('内: '||x);
end loop;
dbms_output.put_line('外: '||x);
end;
/
/********************3.2PL/SQL小例子--while-loop循环***********************/
  
  /********************3.3PL/SQL小例子--for-loop循环***********************/
begin
for i  in 1..5 loop
--for i  in reverse 1..5 loop
dbms_output.put_line('i: '||i);
end loop;
dbms_output.put_line('for exit');
end;
/
  ###注意:oracle的for循环不能实现表达式的递增,只能每次增1或减1。
/********************3.3PL/SQL小例子--for-loop循环***********************/
  
  /********************3.4PL/SQL小例子--GOTO实现循环***********************/
declare
x number;
begin
x:=0;
<<my_xunhuan>>
x:=x+1;
dbms_output.put_line(x);
if x<3 then
GOTO my_xunhuan;
end if;
end;
/
  ###注意:可以加一个标签<<my_xunhuan>>,用GOTO跳转
/********************3.4PL/SQL小例子--GOTO实现循环***********************/
  
  4.异常处理
/**********************************4.1PL/SQL小例子--系统异常处理********************************************/
declare
test varchar2(20);
begin
select name INTO test from aaa where name='001';
dbms_output.put_line(test);
exception
when NO_DATA_FOUND then
dbms_output.put_line('没有数据,出异常了');
end;
/
  ###注意:select name INTO test from aaa where name='001';//其中INTO test是将查出来得结果集赋值于test变量,*只能一个字段数据。
        NO_DATA_FOUND为系统异常
/**********************************4.1PL/SQL小例子--系统异常处理********************************************/
  
  /*************************************4.2PL/SQL小例子--自定义异常处理*******************************/
declare
hello varchar2(20);
e exception;
begin
select a INTO hello from aaa where a='jun';
if hello<>'B部门' then
raise e;
end if;
dbms_output.put_line(hello);
exception
when e then
dbms_output.put_line('自定义异常好使,不是B部门');
end;
/
  ###注意:e exception;定义异常变量、raise抛出异常、exception-->when e then引用自己的异常
/*************************************4.2PL/SQL小例子--自定义异常处理*******************************/
  
  5.记录的使用(即复合变量,类似java中list)
/********************5.1PL/SQL小例子--记录使用***********************/
declare
type myrecord is record(
id varchar2(10),
name varchar2(20)
);
junrecord myrecord;
begin
select a,b INTO junrecord from aaa where a='jun';
dbms_output.put_line(junrecord.id ||','|| junrecord.name);
end;
/
  ###注意:定义记录用type类型、 声明记录junrecord myrecord;//其中junrecord为真正引用时的名、 通过junrecord.id获得记录。*记录可以多个字段数据。
/********************5.1PL/SQL小例子--记录使用***********************/
  
  /********************5.2PL/SQL小例子--记录使用--某一字段与表类型一致***********************/
declare
type myrecord is record(
id aaa.a%type,
name varchar2(20)
);
junrecord myrecord;
begin
select a,b INTO junrecord from aaa where a='jun';
dbms_output.put_line(junrecord.id ||','|| junrecord.name);
end;
/
  ###注意:让记录myrecord中id的类型与aaa表a字段类型一致。
/********************5.2PL/SQL小例子--记录使用--某一字段与表类型一致***********************/
  
  /********************5.3PL/SQL小例子--记录使用--与表名称类型都一致***********************/
declare
myrec aaa%rowtype;
begin
select * INTO myrec from aaa where a='jun';
dbms_output.put_line(myrec.b ||','|| myrec.a);
end;
/
  ###注意:myrec aaa%rowtype;我定义的记录与aaa表名称类型都一致 、 myrec.a引用时必须与aaa表名一致
/********************5.3PL/SQL小例子--记录使用--与表名称类型都一致***********************/
  
  

运维网声明 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-247442-1-1.html 上篇帖子: Oracle索引分析与比较(2) 下篇帖子: oracle笔记(二)DOS界面操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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