王朝网络
分享
 
 
 

Oracle初学者笔记(十二)--PL/SQL1_基础

王朝oracle·作者佚名  2006-11-24
宽屏版  字体: |||超大  

PL/SQL的介绍

PL/SQL:Procedural Language/SQL 过程SQL;

是对SQL的扩展; PL/SQL中存在过程构造和数据库访问;在Oralce服务器和客户机应用程序中使用; 支持大型对象和集合; 实质是在过程语言中嵌入了SQL而不是相反; SQL可以对数据库进行处理,但是它是单条执行的,无法进行连续的处理,也就是说没有逻辑;

特点:

支持对象类型和集合; 调用外部函数和过程; 支持SQL; 支持OOP; 可以在Oracle各个版本间移植,与Oracle集成在一起;

PL/SQL执行原理

PL/SQL块: 包括一组语句: 声明部分:所有变量的声明; 可执行部分:必须有;异常处理部分;

结构:

Declare

Declarations //声明区域

Degin

Executable statements

Exception

Handlers; //如果没有这个处理语句,则会交给系统处理,类似给虚拟机;

End;

实例:

Declare

Eno emp.empno%type;

Name emp.ename%type;

Begin

Select empno,ename into eno,name from emp where empno=8933;

Dbms_output.put_line(‘empno:’||eno||’ ‘||’ename:’||name);

Exception

When no_data_found then

Dbms_output.put_line(‘没有数据’);

End;

出现错误后,错误后的语句不再执行,跳转到错误处理块执行;

变量的定义

变量是数据的临时存储; 可直接对其赋值; 数据类型:

内置数据类型:

标量:一般数据类型,容纳单个值,number(38位),character(有个long子类型),date,boolean(不能用来定义字段)

复合:可变数组,对象类型;record,varray,nested table;

引用:类似游标 ref cursor;

LOB:大型对象类型

*****SQL-Plus的回显服务器端信息的命令:set serveroutput on

SQL> r

1 declare

2 eno varchar(10):='000';

3 ename varchar(20);

4 isExisted boolean default false;

5 empName constant varchar(10):='Mike';

6 begin

7 eno:='7890';

8 ename:='smith';

Dbms_output.put_line(‘eno=’||eno||’ ‘||’ename=’||ename);

9* end;

eno=7890 ename=smith

PL/SQL 过程完成;

如果想动态输出数据库中的信息的话,可以在begin后面这样写:

Select empno,ename to eno,ename from emp where empno=’7002’;

这里如果不加where 语句,则会抛出:实际返回的行数超出请求的行数异常;

SQL> r

1 declare

2 eno varchar(10):='000';

3 ename varchar(20);

4 isExisted boolean default false;

5 empName constant varchar(10):='Mike';

6 begin

7 select empno,ename into eno,ename from emp;//这里没有where

8 Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

9* end;

declare

*

ERROR λÓÚµÚ 1 ÐÐ:

ORA-01422: ʵ¼Ê·µ»ØµÄÐÐÊý³¬³öÇëÇóµÄÐÐÊý

ORA-06512: ÔÚline 7

在SQL语句中对变量赋值用into,在SQL以外用 :=来赋值;

匿名PL/SQL程序块;

注释:-- /* */;

属性

%type 引用数据库列

%rowtype 代表表中的行

也就是说为了防止发生定义的变量长度小于选择的数值长度的异常,我们用这两个属性来做为自适应的变量定义;

SQL> r

1 declare

2 eno emp.empno%type;

3 ename emp.ename%type; ---代表相应字段的类型

4 emprow emp%rowtype; --代表一行

5 isExisted boolean default false;

6 empName constant varchar(10):='Mike';

7 begin

8 select empno,ename into eno,ename from emp where empno=7902;

9 select * into emprow from emp where empno=7788; --使用emprow返回一行

10 Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

11 dbms_output.put_line('empno:'||emprow.empno||'ename:'||emprow.ename);

12* end;

eno=7902 ename=FORD

empno:7788ename:SCOTT

PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

比较运算

Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

只能输出字符型的,所以如果你要输出一个date型的,必须首先用to_char(date,’’)转换日期型数据,正如我们经常to_date(char,’’)一样;

SQL> r

1 declare

2 eno emp.empno%type;

3 ename emp.ename%type;

4 emprow emp%rowtype;

5 thisday date;

6 begin

7 thisday:=sysdate;

8 dbms_output.put_line('this is day:'||to_char(thisday,'YYYY-mm-dd'));

9* end;

this is day:2005-10-24

比较日期的练习:

SQL> r

1 declare

2 eno emp.empno%type;

3 ename emp.ename%type;

4 emprow emp%rowtype;

5 thisday date;

6 begin

7 thisday:=sysdate;

8 if thisday>todate(‘2005-10-23’,’yyyy-mm-dd’) then

9 dbms_output.put_line('this is day:'||to_char(thisday,'YYYY-mm-dd'));

10 else

11 dbms_output.put_line('this is kao');

12 end if;

13* end;

this is day:2005-10-24

控制语句

1,条件控制:f then ,if then else , if then elsif , case

语句块结束的时候必须写end if;

2,循环控制:

计算1加到100:

3,顺序控制:goto 不建议使用;

Null :空语句;有时候暂时不想在需要有代码的地方编代码时用null语句就行;

错误处理

两重类型的异常:预定义的; 用户定义的;raise语句可手工引发异常;TMD跟Java一模一样;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有